关于几个函数的问题

995 2000-06-12 03:45:00
请问这几个函数是干吗用的,WaitForSingleObject,CreateEvent,ResetEvent,SetEvent,怎么使用,能不能给我据几个例子,当然有源程序更好,发到我的邮箱中,谢谢
...全文
114 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nitrogen 2000-06-16
  • 打赏
  • 举报
回复
WaitForSingleObject用于同步等待一个内核对象, 这个对象可以是信号量, 互斥量, 进程, 线程, 事件等等.
同步等待类似于这么一个过程, 想象一下几个人一起吃饭, 但只有一双筷子, 于是在同一时刻只能有一个人吃饭, 其他的人必须等待使用筷子的人放下筷子才能吃饭, 这时筷子就相当于等待的object.
Event是Win32的一种内核对象, 它的使用有些类似于UNIX中的读写锁, 它的特点是一旦释放, 所有等待的线程都可以等到这个event
WHQ 2000-06-16
  • 打赏
  • 举报
回复
你写过多线程的程序吗?它们是在多个线程之间进行同步用的,举一个比较简单的例子:
有一个队列,一个线程不停地往里面加节点,一个队列不停地从中取出并删除节点,如果队列为空,取的线程总取不到数据就老是空转;如果队列已满,加的线程该怎么办(加不进去)这就要上面的几个函数来协调这两个线程同步操作:

// 初始化过程,可以由第三个线程(如主线程完成)
hEvent = CreateEvent(...);
list = new List(50); // 仅是示意,队列大小设为50

// 加入线程
while( 1 ) {
// 生成新节点
...
if ( list.length() == 50 ) // 队列满了,得等一会
WaitForSingleObject(hEvent, FINITE);
else
list.add();
ResetEvent( hEvent ); // 已加入节点,队列自然不会空了,如果第2个线程还在傻等,就让它开始运行吧
}

// 取线程
while( 1 ) {
if ( list.isempty() ) // 没有节点,得等一会
WaitForSingleObject( hEvent, INFINITE );
else
list.get();
// 处理取得的节点
ResetEvent( hEvent ); // 取走了一个节点,队列自然不会满了,如果第一个线程还在傻等,就让它开始运行吧
}

以上仅是示意,实际的应用要比这复杂多了
995 2000-06-16
  • 打赏
  • 举报
回复
难到就没有人帮助我了吗?
ad 2000-06-12
  • 打赏
  • 举报
回复
这是线程之间通讯用到的函数,你大可不用这些函数。

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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