实际编程中常用的线程同步技术【C#,C++】


问题: 启动2个线程,一个收,一个保存收到的数据

C#中:利用AutoResetEvent, WaitHandle.WaitAny来处理。
    外部申明AutoResetEvent mreceiveEvent;
    收线程:  收到数据后mreceiveEvent.Set(); sleep(20);//20ms
    保存线程:在while(true){ int index = WaitHandle.WaitAny(
            mreceiveEvent;, new TimeSpan(0, 0, 1), false);
        if(index != WaitHandle.WaitTimeout)
            //保存数据即可
          }
c++中:利用CreateEvent,WaitForMultipleObjects,SetEvent来做同步处理。
外部什么:handle mhandles = CreateEvent(...);
收线程:   收到数据后,SetEvent(mhandles); sleep(20); //20ms
保存线程: WaitForMultipleObjects(...), ResetEvent(mhandle)

具体例子见VS2005.MSDN:ms-

help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.WIN32COM.v10.en/dllproc/base

/using_event_objects.htm

注意:在多线程程序中,这是我们常用的一个同步办法; 特别需要说明的是

,Sleep(20)是 必须的,一个线程需要考虑让出部分CPU时间片给其他线程执

行的机会。
 Sleep(20) ~~~ WaitforMultipleObjects(20,...)
Sleep(20)是这个线程真正的"睡觉了",在这20ms里面,它什么都不管的。
WaitforMultipleObjects(20,..):是这个线程睁一只眼,闭一只眼,及此刻如

有它关心的Event被触发,则此线程马上会"起床"的.

如果仅仅想实现等待,使用Sleep足以。
如果对实时性要求比较高,需要使用waitforMultipleObject来处理的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sxbluebird

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值