是否有一种标准的函数可以实现并发非阻塞接收消息?看起来所有在std.concurrency
中可用的函数都是阻塞的,最接近的非阻塞函数是receiveTimeout
,但它仍然会等待超时。如果线程没有传递任何消息,我希望它能立即返回。
这里是我使用receiveTimeout
得出的结果。
module main;
import std.concurrency;
import std.stdio : writefln, readln;
import core.time;
import core.thread;
void spawnedFunc() {
while (true) {
receiveTimeout(
dur!("nsecs")(1),
(int i) { writefln("Received %s", i); }
);
Thread.sleep(dur!("msecs")(100));
}
}
void main() {
auto tid = spawn(&spawnedFunc);
while (true) {
readln();
send(tid, 42);
}
}
更新:
我最好的选择是像这样的一个函数吗?
void receiveNonBlocking(T...)(T ops) {
receiveTimeout(
dur!("nsecs")(1),
ops
);
}
...
receiveNonBlocking(
(int i) { writefln("Received %s", i); }
);
0.dur!"nsec"
工作吗? - sigodreceiveTimeout (0.msecs);
,它确实起到了作用。 - Gassa