问题: 启动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来处理的。