On Friday, 25 September 2020 at 13:37:09 UTC, Steven Schveighoffer wrote:

Given the rate and the number of concurrent tasks, I'd say threads.

-Steve

Here is my testable and minimal code using 1 extra thread. Thank you all!

import core.thread;

import std.stdio;
import std.concurrency;
import std.container.dlist;
import std.datetime;
import std.datetime.systime;

__gshared DList!Entry queue;
__gshared bool shouldRun = true;

struct Entry {
    SysTime st;
    int val;
}

void main() {

    spawn(&worker);

    while (true) {
        int v;

"enter your value: ".write; // getFlameIntensityViaImageProcessing()
        readf(" %d", &v);

        if(v==0){
            shouldRun = false;
            break;
        }


        queue.insertFront(Entry(Clock.currTime + 1500.msecs, v));
    }

    writeln("main is done.");
}

void worker() {
    while(shouldRun){
        auto r = queue[];
        if(!r.empty && queue.back.st < Clock.currTime){
writeln(queue.back); // consume the value sendPWMSignalToValfe(pwmval)
            queue.popLastOf(r);
        }
    }
}

Reply via email to