研究了下win32下线程的使用,在网上找了很多都是用的MFC下的类CEvent,为了方便研究,写了个win32下的,具体代码如下:
///
HANDLE hThread;
HANDLE hEvent;
关键函数:
CreateEvent 创建事件对象函数
SetEvent 设置事件对象为Singled
ResetEvent 设置事件对象为Unsingled
PulseEvent 将指定的事件设为Singled。如果是一个人工重设事件,正在等候事件的、被挂起的所有线程都会进入活动状态。函数随后将事件设回,并返回。如果是一个 自动重设事件,则正在等候事件的、被挂起的单个线程会进入活动状态。事件随后设回Unsingled,并且函数返回
WaitForSingleObject 等待对象函数
在自动重置模式下PulseEvent和SetEvent的作用没有什么区别,但在手动模式下PulseEvent就有明显的不同,你可以比较容易的控制程序是单步走,还是连续走。如果让循环按要求执行一次就用PulseEvent,如果想让循环连续不停的运转就用SetEvent,在要求停止的地方发个ResetEvent就OK了。
///
HANDLE hThread;
HANDLE hEvent;
头文件: stdio.h,windows.h(winbase.h)
DWORD WINAPI ThreadProc1( LPVOID lpParamenter);
main( argc, * argv[])
{
hEvent = CreateEvent(, TRUE, FALSE, );
hThread = CreateThread(, , ThreadProc1, , , );
getchar();
PulseEvent(hEvent);
Sleep();
getchar();
SetEvent(hEvent);
Sleep();
ResetEvent(hEvent);
getchar();
PulseEvent(hEvent);
Sleep();
TerminateThread(hThread, );
printf();
;
}
DWORD WINAPI ThreadProc1( LPVOID lParamenter )
{
iCount = ;
( )
{
WaitForSingleObject(hEvent, INFINITE);
printf(, iCount++);
}
;
}
///
运行环境: VC6.0
关键函数:
CreateEvent 创建事件对象函数
SetEvent 设置事件对象为Singled
ResetEvent 设置事件对象为Unsingled
PulseEvent 将指定的事件设为Singled。如果是一个人工重设事件,正在等候事件的、被挂起的所有线程都会进入活动状态。函数随后将事件设回,并返回。如果是一个 自动重设事件,则正在等候事件的、被挂起的单个线程会进入活动状态。事件随后设回Unsingled,并且函数返回
WaitForSingleObject 等待对象函数
在自动重置模式下PulseEvent和SetEvent的作用没有什么区别,但在手动模式下PulseEvent就有明显的不同,你可以比较容易的控制程序是单步走,还是连续走。如果让循环按要求执行一次就用PulseEvent,如果想让循环连续不停的运转就用SetEvent,在要求停止的地方发个ResetEvent就OK了。
转载于:https://blog.51cto.com/xulin/60969