SetEvent,WaitForSingleObject这几个函数什么意思啊?

Mars531 2004-11-25 09:57:04
这几个函数一般用于什么场合,能给个简单的例子吗?
...全文
509 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gdlian 2004-12-15
  • 打赏
  • 举报
回复
分都让人抢光啦
这两个函数基本上用于线程同步控制。如果你对消息机制了解的话。
这两个函数也不难理解
zengwujun 2004-12-15
  • 打赏
  • 举报
回复
SetEvent(HANDLE hEvent)它的参数是一个内核对象,而内核对象是可以进程共享的,因此它可以用于进程间的同步;

而EnterCriticalSection是用于临界区的保护,它会对临界区中的变量进行保护,其他线程试图访问临界区中的变量时会被挂起等待,所以这个函数容易导致死锁的发生。

EnterCriticalSection是运行在用户态上的,对它的调用只需要几十个cpu周期,SetEvent会从用户态切换到内核态(因为使用了内核对象),所以它的耗时多达上1000的cpu周期。

以上就是他们两个函数的区别。
handwolf 2004-11-26
  • 打赏
  • 举报
回复
读写文件要异步进行的例子!


HANDL hForRead;
HANDl hForWrite;

初始化
SetEvent(hForRead);//先写后读

读进程
while(1)
{
WaitForSingleObject(hForRead,INFINTE);//等待hForRead事件直到发生
ResetEvent(hForWrite);//重新设置hForWrite事件到未发生状态
...写数据
SetEvent(hForWrite);//设置hForWrite事件为生状态

}

写进程
while(1)
{
WaitForSingleObject(hForWrite,INFINTE);//等待hForWrite事件直到发生
ResetEvent(hForRead);//重新设置hForRead事件到未发生状态
...读数据
SetEvent(hForRead);//设置hForRead事件为生状态
}
hchinside 2004-11-26
  • 打赏
  • 举报
回复
这种问题,看书吧。在这里谁能讲清楚。
Kudeet 2004-11-26
  • 打赏
  • 举报
回复
SetEvent()函数用来把事件对象设置成信号状态,需事件对象句柄作参数。critical不能用于进程间的同步控制,而EVENT可以。
Mars531 2004-11-25
  • 打赏
  • 举报
回复
SetEvent和VC里的EnterCriticalSection作用有什么异同,critical用于临界区保护,也可以用于线程同步,与event有什么区别?
Kudeet 2004-11-25
  • 打赏
  • 举报
回复
一般都用于同步控制
Threads in MFC Part II: Synchronization Objects
http://www.devhood.com/tutorials/tutorial_details.aspx?tutorial_id=439

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧