What sync object should i use?
Heinz
thor587 at gmail.com
Mon May 13 12:51:54 PDT 2013
On Monday, 13 May 2013 at 19:41:48 UTC, Heinz wrote:
> Hi,
>
> I'm looking for an object in "core.sync" whose internal counter
> can be 0 or 1 (signaled/not signaled), just like Event Objects
> in Win32
> (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682396%28v=vs.85%29.aspx).
> The object must be waitable and able to notify waiters. A
> semaphore is the most similar thing but its internal counter
> can range from 0 to x. I can perfectly create and use an event
> under Win32 for my needs but i do not know their counterparts
> in FreeVSD, Linux and OSX; that's why i'm trying to use an
> already implemented object from the runtime.
>
> This is what i'm trying to do:
>
> void MyFunc()
> {
>
> }
Damn, i hit enter and posted before completion, fail! Here's the
code:
/////////////////////////////////////////////////
bool do_loop;
// This function runs in its own thread.
void MyFunc()
{
while(true)
{
if(!do_loop)
myobject.wait(); // Wait for sync object.
// ... Do other stuff. "do_loop" can be set to false again here.
}
}
// This one is called by different threads.
void loop(bool val)
{
do_loop = val;
if(do_loop) // Release sync object if it is waiting.
myobject.notify();
}
/////////////////////////////////////////////////
The idea is that i have a code that loops and do a lot of stuff
but sometimes i don't want it to loop so i set do_loop to false.
When i want it to loop i set do_loop to true and release the
waiting object.
The problem of using a semaphore is that if i call loop() with
true multiple times, my code will perform extra loops until the
internal counter gets to 0, that's why i need a 0-1 sync object.
Any suggestions?
Thank you in advance.
More information about the Digitalmars-d-learn
mailing list