摘要: 一两种方式创建,一种为自动重置,在其他线程使用WaitForSingleObject等待到事件对象变为有信号后该事件对象自动又变为无信号状态,一种为人工重置在其他线程使用WaitForSingleObject等待到事件对象变为有信号后该事件对象状态不变。例如有多个线程都在等待一个线程运行结束,我们就可以使用人工重置事件,在被等待的线程结束时设置该事件为有信号状态,这样其他的多个线程对该事件的等待都会成功(因为该事件的状态不会被自动重置)。事件相关的API如下:创建事件对象:HANDLECreateEvent(LPSECURITY_ATTRIBUTESlpEventAttributes,//安全 阅读全文
posted @ 2014-03-17 14:49 linux--lgz 阅读(184) 评论(0) 推荐(0) 编辑
摘要: 现在我们回过头来讲WaitForSingleObject这个函数,从前面的例子中我们看到WaitForSingleObject这个函数将等待一个对象变为有信号状态,那么具有信号状态的对象有哪些呢?下面是一部分:MutexEventSemaphoreJobProcessThreadWaitabletimerConsoleinput互斥量(Mutex),信号灯(Semaphore),事件(Event)都可以被跨越进程使用来进行同步数据操作,而其他的对象与数据同步操作无关,但对于进程和线程来讲,如果进程和线程在运行状态则为无信号状态,在退出后为有信号状态。所以我们可以使用WaitForSingleO 阅读全文
posted @ 2014-03-17 14:48 linux--lgz 阅读(277) 评论(0) 推荐(0) 编辑
摘要: 由于进程/线程间的操作是并行进行的,所以就产生了一个数据的问题同步,我们先看一段代码:intiCounter=0;//全局变量DOWRDthreadA(void*pD){for(inti=0;im_hThread;hThread[1]=pT2->m_hThread;hThread[2]=pT3->m_hThread;//等待线程结束//至于WaitForMultipleObjects的用法后面会讲到。WaitForMultipleObjects(3,hThread,TRUE,INFINITE);//删除临界区DeleteCriticalSection(&criCounter 阅读全文
posted @ 2014-03-17 14:42 linux--lgz 阅读(4249) 评论(0) 推荐(0) 编辑