The event module provides a primitive for lightweight signaling of other threads (emulating Windows events on Posix)
represents an event. Clients of an event are suspended while waiting for the event to be "signaled".
Implemented using pthread_mutex
and pthread_condition
on Posix and CreateEvent
and SetEvent
on Windows.
import core.sync.event, core.thread, std.file; struct ProcessFile { ThreadGroup group; Event event; void[] buffer; void doProcess() { event.wait(); // process buffer } void process(string filename) { event.initialize(true, false); group = new ThreadGroup; for (int i = 0; i < 10; ++i) group.create(&doProcess); buffer = std.file.read(filename); event.set(); group.joinAll(); event.terminate(); } }
Creates an event object.
bool manualReset
| the state of the event is not reset automatically after resuming waiting clients |
bool initialState
| initial state of the signal |
Initializes an event object. Does nothing if the event is already initialized.
bool manualReset
| the state of the event is not reset automatically after resuming waiting clients |
bool initialState
| initial state of the signal |
deinitialize event. Does nothing if the event is not initialized. There must not be threads currently waiting for the event to be signaled.
Set the event to "signaled", so that waiting clients are resumed
Reset the event manually
Wait for the event to be signaled without timeout.
true
if the event is in signaled state, false
if the event is uninitialized or another error occuredWait for the event to be signaled with timeout.
Duration tmout
| the maximum time to wait |
true
if the event is in signaled state, false
if the event was nonsignaled for the given time or the event is uninitialized or another error occured
© 1999–2019 The D Language Foundation
Licensed under the Boost License 1.0.
https://dlang.org/phobos/core_sync_event.html