在Win32下,线程中的事件使用

本文介绍了在Win32环境下如何使用线程及事件对象进行进程间通信。通过具体的代码实例,演示了CreateEvent、SetEvent、ResetEvent、PulseEvent等函数的用法及其在自动重置和手动重置模式下的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://274387.blog.51cto.com/264387/60969

研究了下win32下线程的使用,在网上找了很多都是用的MFC下的类CEvent,为了方便研究,写了个win32下的,具体代码如下:

///////////////////////////////////////////////////////////
HANDLE hThread;
HANDLE hEvent;


DWORD WINAPI ThreadProc1( LPVOID lpParamenter);

int main(int argc, char* argv[])
{

// 更改第二个参数你会发现PulseEvent的用处,第三个参数用来设置初始状态是Singled还是Unsingled。 hEvent = CreateEvent(NULL, TRUE, FALSE, "abc");

hThread = CreateThread(NULL, NULL, ThreadProc1, NULL, NULL, NULL);

getchar();

PulseEvent(hEvent);

Sleep(1000);

getchar();
SetEvent(hEvent);

Sleep(1000);

ResetEvent(hEvent);

getchar();
PulseEvent(hEvent);

Sleep(1000);

TerminateThread(hThread, NULL);

printf("Hello World!/n");
return 0;
}

DWORD WINAPI ThreadProc1( LPVOID lParamenter )
{
int iCount = 0;

while( true )
{
WaitForSingleObject(hEvent, INFINITE);
printf("%d/n", iCount++);
}

return NULL;
}
///////////////////////////////////////////////////////////
运行环境: VC6.0

头文件: stdio.h,windows.h(winbase.h)
关键函数:
    CreateEvent             创建事件对象函数
    SetEvent                设置事件对象为Singled
    ResetEvent              设置事件对象为Unsingled
    PulseEvent              将指定的事件设为Singled。如果是一个人工重设事件,正在等候事件的、被挂起的所有线程都会进入活动状态。函数随后将事件设回,并返回。如果是一个自动重设事件,则正在等候事件的、被挂起的单个线程会进入活动状态。事件随后设回Unsingled,并且函数返回
    WaitForSingleObject     等待对象函数


在自动重置模式下PulseEvent和SetEvent的作用没有什么区别,但在手动模式下PulseEvent就有明显的不同,你可以比较容易的控制程序是单步走,还是连续走。如果让循环按要求执行一次就用PulseEvent,如果想让循环连续不停的运转就用SetEvent,在要求停止的地方发个ResetEvent就OK了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值