License
Distributed under the
Boost Software License 1.0.
(See accompanying file LICENSE)
The event module provides a primitive for lightweight signaling of other threads (emulating Windows events on Posix)
(See accompanying file LICENSE)
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.setIfInitialized();
group.joinAll();
event.terminate();
}
}void initialize(bool manualReset, bool initialState)Initializes an event object. Does nothing if the event is already initialized.void terminate()deinitialize event. Does nothing if the event is not initialized. There must not be threads currently waiting for the event to be signaled.void set()void setIfInitialized()Set the event to "signaled", so that waiting clients are resumedvoid reset()Reset the event manuallybool wait()Wait for the event to be signaled without timeout.this(bool manualReset, bool initialState)Creates an event object.