2010-06-11 39 views
1

我有一個運行所有的時間線程:使用命名的系統信號量作爲一個事件來觸發的東西在另一個進程

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被調用時,我得到了異常'沒有給定名稱的句柄存在'。我究竟做錯了什麼?

謝謝。

+0

都是作爲同一用戶運行的進程?不是他們需要,只是好奇而已。 – 2010-06-11 03:56:56

+0

是的,他們都是以同一用戶身份運行的。 – user363061 2010-06-11 03:59:17

回答

2

事實證明,問題是我需要將Global \放在Semaphore名稱的前面。

0

看起來好像你有錯誤的訂單。信號量sem_DoStuff需要在創建線程之前存在(很可能在調用函數DoStuff之前)。調用這些函數的方法/進程可能應該是創建信號量的方法/進程。

+0

我只是試圖在線程啓動之前調用的靜態構造函數中創建信號量,而且我仍然遇到同樣的問題。 – user363061 2010-06-11 04:04:15

+0

另外,調用DoStuff的方法/過程實際上是一個通過COM調用DoStuff的Perl腳本。 – user363061 2010-06-11 04:09:29

+0

它是否在DoStuff被調用之前創建? – 2010-06-11 04:09:54

相關問題