《win32多线程程序设计》读书笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/haimianjie2012/article/details/86092909

什么是进程,什么是线程,进程与线程的区别?
进程含有内存和资源,被进程拥有的内存,理论上可以高达2GB,资源包括核心对象(如file handles和线程)、USER资源(对话框和字符串)、GDI资源(如Device Context和brushes)。
进程本身不能够执行,只是提供一个安置内存和线程的地方。

Win32核心对象包括:
进程processes
线程threads
文件files
事件events
信号量semaphores
互斥量mutexes
管道(pipes,分为named和anonymous两种)
GDI对象有单一拥有者,核心对象的拥有者可以包括多个,甚至可以跨进程。
为了保持对每个拥有者追踪,核心对象有一个引用计数,记录多少个handles对应此对象,以及这个对象对应的拥有者。

Worker线程,指完全不牵挂到图像用户界面,纯粹做运算的线程。

P103

后台打印


Win32线程包括GUI线程和worker线程。
Worker线程,指完全不牵挂到图像用户界面,纯粹做运算的线程,它会使主线程的消息队列失去反应。
GUI线程负责建造窗口以及处理主消息循环,不会去做那些不能马上完成的工作。
如果worker线程也产生了一个窗口,那么就会有一个消息队列伴随窗口而产生并附着在此线程上,于是worker线程就变成了一个GUI线程。也就是说,worker线程不能产生窗口、对话框、消息框或其他任何与UI有关的东西。

如果worker线程需要输入输出错误信息,它应该授权给UI线程来做,并且将结果通知给worker线程。

TVERIFY宏即适用于GUI程序也适用于console程序,这个宏内部其实是记录并解释了Win32 GetLastError()的结果。如果Win32函数失败,MTVERIFY()会打印出一段简短的文字说明,在多线程编程时检查错误效果尤为突出。

HeapAlloc是一个Windows API函数。它用来在指定的堆上分配内存,并且分配后的内存不可移动。
 

多线程后台打印程序

猜你喜欢

转载自blog.csdn.net/haimianjie2012/article/details/86092909