0
我正在創建一個服務,它正在等待登錄事件。發生此事件時,服務應啓動一個線程,該線程將完成剩餘的工作。如何在事件發生時啓動多個線程?
在服務:
while (WaitForSingleObject(ghSvcStopEvent, 0) != WAIT_OBJECT_0)
{
DWORD dwEventFlags;
BOOL bRes;
// WTSWaitSystemEvent waits until a logon event ocurs
bRes = WTSWaitSystemEvent(WTS_CURRENT_SERVER_HANDLE, WTS_EVENT_LOGON, &dwEventFlags);
if (dwEventFlags == WTS_EVENT_NONE)
{
ShowErrorText("Cancelling waiting for logon event. Service shutting down.", 0, true);
}
if (bRes)
{
// Someone has logged on
HANDLE hThread = CreateThread(NULL, 0, ServiceWorkerThread, NULL, 0, &dwThreadID);
}
else
{
ShowErrorText("WTSWaitSystemEvent failed.", GetLastError(), true);
}
}//while
我的問題是,我怎麼能收正確地返回CreateThread的手柄?如果我想使用WaitForMultipleObjects,那麼第一個參數就是線程的大小。對象句柄的最大數量是MAXIMUM_WAIT_OBJECTS,它是36.所以這意味着我只能啓動36個線程。但是,如果服務運行時間很長,那麼如果用戶登錄超過36次而不重新啓動系統,則這還不夠。
你知道我在哪裏可以找到一個簡單的例子嗎? – kampi