就是自己随便做的笔记,可能对不起观众了。只是记录了用的函数。具体使用方法还是看下msdn
创建CreateThread 参见msdn 要记得closehandle
mfc 创建线程 afxbeginthread
创建事件 createevent
等待函数WaitForSingleObject 自动事件有信号 经过等待函数变成无信号。
线程退出,写在timer中 隔一段时间一检测。可以用多等待 WaitForMultipleObjects返回WAIT_OBJECT_0时则为所有事件都为有信号状态。
线程同步
临界区法
定义临界区CRITICAL_SECTION m_critical;
InitializeCriticalSection(&m_critical) 初始化临界区
EnterCriticalSection(&(p->m_critical));进入
LeaveCriticalSection(&(p->m_critical));离开
DeleteCriticalSection(&m_critical)释放
事件法
定义自动变换事件m_hEvent
WaitForSingleObject(m_hEvent,INFINITE);
//被保护的代码
SetEvent(p->m_hEvent);
互斥对象法
穿件互斥对象 createmutex
等待函数WaitForSingleObject
//被保护的代码
释放互斥对象使用权ReleaseMutex
信号量 semaphore内核对象
CreateSemaphore(安全性,初始话信号量,最大信号量,name)
经过wait函数信号量减少
releaseSemaphore(句柄,信号增加量,【out】前个信号量)
利用事件判断应用程序不能运用两个
createevent的最后一个参数name 写一个“唯一的”
然后再创建的这个时间 用“唯一的”这个名字 就会出错
用getlasterror 能得到ERROR_ALREADY_EXISTS
整个过程应该在app 的init中进行