SetEvent的问题
HANDLE g_hEvent
HANDLE g_refreshthread
DWORD WINAPI refreshsearch()
{
DWORD dwWaitRet = 0;
Sleep(5000) //确保可以Wait到event
dwWaitRet = WaitForSingleObject(g_hEvent,100);
if(dwWaitRet == WAIT_OBJECT_0)
{
ResetEvent(g_hEvent); //
return 0;
}
}
void main()
{
DWORD ret = 0;
char tmp[10];
g_hEvent = CreateEvent(0,TRUE,FALSE,"killrefresh");
g_refreshthread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)refreshsearch,(LPVOID)NULL,
0,&ThreadID); //*/
SetEvent(g_hEvent);
Sleep(15000);
ret = WaitForSingleObject(g_hEvent,500);
}
如果 子线程
if(dwWaitRet == WAIT_OBJECT_0)
{
SetEvent(g_hEvent); //RestEvent改为SetEvent
return 0;
}
这样
那么主线程执行到以下的时候:
ret = WaitForSingleObject(g_hEvent,500);
返回0。
问题是主线程已经SetEvent了,子线程在WaitForSingleObject的成功,并没有把g_Event进行Reset,怎么可以对它再次SetEvent呢
HANDLE g_refreshthread
DWORD WINAPI refreshsearch()
{
DWORD dwWaitRet = 0;
Sleep(5000) //确保可以Wait到event
dwWaitRet = WaitForSingleObject(g_hEvent,100);
if(dwWaitRet == WAIT_OBJECT_0)
{
ResetEvent(g_hEvent); //
return 0;
}
}
void main()
{
DWORD ret = 0;
char tmp[10];
g_hEvent = CreateEvent(0,TRUE,FALSE,"killrefresh");
g_refreshthread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)refreshsearch,(LPVOID)NULL,
0,&ThreadID); //*/
SetEvent(g_hEvent);
Sleep(15000);
ret = WaitForSingleObject(g_hEvent,500);
}
如果 子线程
if(dwWaitRet == WAIT_OBJECT_0)
{
SetEvent(g_hEvent); //RestEvent改为SetEvent
return 0;
}
这样
那么主线程执行到以下的时候:
ret = WaitForSingleObject(g_hEvent,500);
返回0。
问题是主线程已经SetEvent了,子线程在WaitForSingleObject的成功,并没有把g_Event进行Reset,怎么可以对它再次SetEvent呢
...全文
相关推荐
VC++事件的使用(常在多线的同步中使用)
通过创建、设置、重置事件以及等待事件,开发者可以有效地管理线程间的交互,提高程序的并发性能,同时避免潜在的同步问题。
【经验总结】NvMBlock必发写不进去问题分析
NvMBlock必发写不进去问题分析
秒杀windows多线程之事件
手动置位事件需要调用SetEvent来手动触发,而自动置位事件在被WaitForSingleObject等待后会自动置为未触发状态。
多线程的同步机制 VC++
VC++中提供了多种同步机制来处理多线程间的同步问题,其中Event是常用的一种。Event,即事件对象,它有手动重置和自动重置两种类型。
[Delphi]多线程编程(13)多线程同步之Event(事件对象).pdf
这可能是由于扫描过程中技术问题导致的,不过从这些内容的重复性来看,这部分可能是对CreateEvent函数及其参数的解释。


进程/线程/DLL
