On Monday, 17 February 2014 at 12:03:39 UTC, Dejan Lekic wrote:
On Monday, 17 February 2014 at 11:08:16 UTC, Chris wrote:
The D way of implementing a timer? I need to (automatically) execute a function that performs a clean up, say every hour.

if (file.older than 1 hour) {
   remove;
}

Here is a quick timer implementation that you can improve yourself:

import std.stdio;
import core.thread;

class ChrisTimer : Thread {
    private void delegate() funcToRun;
    private long timeToWait;
    private bool done = false;
    private int noSheep;
    private Duration howLong;

// We could make any function a parameter to ChrisTimer if we had a
    // constructor like:
    // this(void delegate() dg, long ms) {

    this(long ms) {
        funcToRun = &doSomething;
        timeToWait = ms;
        howLong = dur!("msecs")(timeToWait);
        funcToRun = &doSomething;
        super(&run);
    }

    private void run() {
        while (isRunning && !done) {
            funcToRun();
            sleep(howLong);
        }
    }

// Example function that is just going to count sheep (up to 10).
    public void doSomething() {
        ++noSheep;
        writeln("Counted ", noSheep, " sheep.");
        if (noSheep >= 10) {
            done = true;
        }
    }

} // ChrisThread class

int main(string[] args) {
    auto ct = new ChrisTimer(2000);
    ct.start();

    return 0;
}

Great stuff, thanks for the code example. I feel flattered to have my own ChrisTimer now. I'll see which implementation is better suited for the task (vibe.d's setTimer or my own thread based on your example).

Reply via email to