gpt4 book ai didi

c - 当事件发生时如何启动多个线程?

转载 作者:行者123 更新时间:2023-11-30 17:45:28 24 4
gpt4 key购买 nike

我正在创建一个正在等待登录事件的服务。当此事件发生时,服务应该启动一个线程,该线程将完成其余的工作。

在服务中:

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 次而不重新启动系统,就不够了。

最佳答案

使用线程池以避免需要销毁线程。当您的应用程序退出时,您不需要关闭句柄 - Windows 会为您执行此操作。

关于c - 当事件发生时如何启动多个线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19621984/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com