Using a named system semaphore as an event to trigger something in another process.
Posted
by jbraz
on Stack Overflow
See other posts from Stack Overflow
or by jbraz
Published on 2010-06-11T03:48:35Z
Indexed on
2010/06/11
3:53 UTC
Read the original article
Hit count: 210
I have a thread that runs all the time:
private void DoSomeStuffThread() {
Semaphore sem = new Semaphore(0, 3, "sem_DoStuff");
sem.WaitOne();
do {
//do some stuff
} while (sem.WaitOne());
}
I want to be able to only execute the stuff in the do block when something from another process says so. I am trying to use the "sem_DoStuff" named system semaphore to allow this to happen.
The code that gets executed in my other process:
public string DoStuff() {
try {
Semaphore sem = Semaphore.OpenExisting("sem_DoStuff");
sem.Release();
} catch (Exception e) {
return e.Message;
}
}
So, the idea is that when DoStuff gets called, the semaphore gets released, and DoSomeStuffThread stops waiting, executes what is in the do block, and then waits for DoStuff again before it is getting called. But, when DoStuff gets called, I'm getting the exception 'No handle of the given name exists.'. What am I doing wrong?
Thanks.
© Stack Overflow or respective owner