记录一些学习小事

Work hard

统计

留言簿

阅读排行榜

评论排行榜

多线程、事件event

就是自己随便做的笔记,可能对不起观众了。只是记录了用的函数。具体使用方法还是看下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中进行

posted on 2011-07-30 14:32 陈晓 阅读(672) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理