Используя именованный системный семафор как событие для инициирования чего-то в другом процессе

У меня есть поток, который работает все время:

private void DoSomeStuffThread() {
Semaphore sem = new Semaphore(0, 3, "sem_DoStuff");
sem.WaitOne();
do {
    //do some stuff
} while (sem.WaitOne());
}

Я хочу смочь только выполниться, материал в действительно блокируются, когда что-то от другого процесса говорит так. Я пытаюсь использовать "sem_DoStuff", названный системным семафором, чтобы позволить этому происходить.

Код, который выполнен в моем другом процессе:

public string DoStuff() {
try {
    Semaphore sem = Semaphore.OpenExisting("sem_DoStuff");
    sem.Release();
} catch (Exception e) {
    return e.Message;
}
}

Так, идея состоит в том, что, когда DoStuff называют, семафор выпущен, и DoSomeStuffThread прекращает ожидать, выполняет то, что находится в, действительно блокируются, и затем ожидает DoStuff снова, прежде чем это станет названным. Но, когда DoStuff называют, я добираюсь, исключение 'Никакой дескриптор имени существует'.. Что я делаю неправильно?

Спасибо.

1
задан user363061 11 June 2010 в 03:48
поделиться

2 ответа

Оказывается, проблема заключалась в том, что мне нужно было поставить Global \ перед именем семафора.

2
ответ дан 2 September 2019 в 23:49
поделиться

Похоже, у вас неправильный порядок. Семафор sem_DoStuff должен существовать до создания потока (и, вполне возможно, до вызова функции DoStuff ). Метод / процесс, который их вызывает, вероятно, должен быть тем, который создает семафор.

0
ответ дан 2 September 2019 в 23:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: