1

我正在開發與VC2005,我有一個線程的問題。Visual c + +線程與互斥鎖不阻止

我有一個線程從隊列中取出數據併發送它。但是這個線程發送一個請求,並且必須等待答覆發送一個新的請求(我想超時以防止無限超時)。

我有這樣一個主題:

while (true){ 
    dequeue() 
    send() 
    WaitForSingleObject(ptClass->getMutex(),10000); 
} 

但這WaitForSingleObject的永不停歇......我init事件是這樣的:

HANDLE ghMutex = CreateEvent(NULL,FALSE, FALSE, ""); 

的想法是阻塞線程停止發送數據,當答案到來時,解除封鎖這個線程發送一個新的請願......爲什麼不停止?

問候

+0

這不是一個互斥體。這是一個事件。我認爲你需要展示更多的代碼。 – 2011-05-25 10:53:42

+0

它可能停止,但只有10秒。然後它會發送下一個數據包,因爲你提供了一個超時。 – RedX 2011-05-25 11:15:19

回答

1

這個線程必須等待該事件被設置爲有信號,因此它可以被再次喚醒。您必須使用SetEvent將事件設置爲發送信號。不知道你會在哪裏做,因爲我不知道你的架構,但那是缺少的。

WaitForSingleObject將您的線程從CPU上下文中取出,但不會再被喚醒。

如果您希望等待事件設置爲發送信號並且無法保證立即發生,那麼您的等待超時應該設置爲INFINITE。

你沒有使用互斥量,你正在使用AutoResetEvent,但你必須設置它!

+0

他寧願問爲什麼它永遠不會阻塞,而不是爲什麼它會無限地阻止,如果我正確地理解它。 – RedX 2011-05-25 11:14:47

+0

@RedX:好點,我做了一個編輯 – 2011-05-25 11:19:31