2013-01-07 94 views
-1

這是我需要做的 - 1.定義一個句柄threadHandle並定義一個句柄h [20] ...數組中的每個條目的值爲threadHandle。waitformultipleobjects句柄數量未知

  1. 我的代碼打開了20個線程,一旦完成,每個線程都有信號的主線程,一旦所有這些信號,主線程必須登錄東西日誌文件。

我打算做類似:

限定threadHandle和如上所定義的手柄H [20}陣列。

Obnce的代碼打開20個線程,這樣做 - waitformultipleobjects(NULL,20,h,true,10000)

現在的代碼將等待所有的H數組中的手柄,以等待返回之前進行設置。但由於h的所有值都相同,所以等待函數返回一個錯誤。有沒有辦法解決這個問題?我基本上需要所有線程發回調用線程......爲20個線程中的每一個定義20個處理程序似乎也不是一個好主意。

我可以這樣做嗎? -

define threadHandle和句柄數組h [20]。 維護一個變量計數,用於發回主線程的線程數。

waitforsingleobject(threadHandle) 

一旦這種收益,增量次數,如果數< 20重複上面的等待語句。 繼續操作直到count = 20,然後登錄到文件。 當然,如果有任何等待時間超時,那麼我們會在日誌文件中記錄失敗。

我想這個,但想知道是否有更好的方法來做到這一點。

TIA。 anand

+0

在多個線程中使用相同的事件將不起作用。很有可能你會錯過幾個有意義的事件。相反,如傑裏所說的,使用20個獨特的事件。有一個EVT_BASE並將每個事件初始化爲EVT_BASE + 1 ... + 20。你也可以改進你的設計來包裝子線程並隱藏初始化 – Gayan

+1

所有的值都是一樣的嗎? WTF? –

回答

1

創建20個事件對象。將他們的手柄放入h。傳遞一個到你創建的每個線程。當線程需要發信號給父母時,它表示該事件。父級在事件句柄上等待,當它們全部被髮送時,它將寫入日誌。

0

Maintain a variable count for the number of threads。是的,你可以這麼做。

nCount The number of object handles in the array pointed to by lpHandles. The maximum number of object handles is MAXIMUM_WAIT_OBJECTS. This parameter cannot be zero.

NCOUNT是指定數組大小,但手柄等待的數量。但是,它不應超過數組大小,兩者不得超過MAXIMUM_WAIT_OBJECTS。

提示:這不限於像線程句柄這樣的特定句柄。你可以用這種方法處理各種可以處理的混合物。 (MSDN WaitForMultipleObjects function

But since all the values of h are the same...,它們是不一樣的並且WaitForMultipleObjects返回值將相應地改變(WAIT_OBJECT_0 + NCOUNT)。

1

改爲使用一個信號量(請參閱CreateSemaphore()API,計數初始化爲0),以確保所有線程都發出信號。 WaitForSingleObject在for循環中,最多計數爲20.更容易設置,不會錯過任何事件,並可用於任何數量的線程(在合理範圍內)。