浏览 2254 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (8) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-31
最后修改:2009-12-31
GUI线程负责建造窗口以及处理主消息循环,worker负责执行纯粹运算工作。 GUI线程的定义是:拥有消息队列的线程,任何一个特定窗口的消息总是被产生这一窗口的线程抓到并处理,所有对此窗口的改变也都应该由该线程完成。 如果worker线程也产生一个窗口,那么就会有一个消息队列随之被产生出来并且附着到此线程上,于是worker线程变成了GUI线程。这里意思是,worker线程不能够产生窗口,对话框,消息框,或任何其他与UI有关的东西。 pInfo = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(ThreadPrintInfo)); // free data structure passed in. HeapFree(GetProcessHeap(), 0, pInfo); GetTickCount() Critical Sections (临界区) Critical Sections 不是核心对象,因此没有handle这样的东西。和核心对象不同,它存在于进程的内存空间内。 初始化 InitializeCriticalSection() 释放 DeleteCriticalSection() EnterCriticalSection() LeaveCriticalSection() 最小锁定时间 不要长时间锁住一份资源 不要在一个Critical Section之中调用sleep或者任何wait...函数 当以一个同步机制保护一份资源时,这项资源被使用的频率如何?线程必须多快释放这份资源,才能确保整个程序的运作很平顺。 避免Dangling Critical Sections Critical Section的一个缺点是:没有办法获知进入 Critical Section的那个线程是死是活。由于 Critical Section不是核心对象,如果进入 Critical Section的那个线程结束或者当掉了,而没有调用leave Critical Section的话,系统没有办法将该 Critical Section清楚,如果需要那样的功能,应该使用mutex 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |