读到这部分是关于线程的,从基础到优先级、关联性到后来的同步,内容比较多。
线程创建的API是CreateThread,但由于可能的内存泄漏问题,在C/Cpp中用_beginthreadex来完成。又由于类型的转型问题,书中直接用宏来完成这个函数
另一个有趣的问题是伪句柄,常用的GetCurrentProcess和GetCurrentThread都得到的是伪句柄,而线程间一些操作要用到真句柄,而从伪句柄得到真正的句柄是用前面章节介绍的DuplicateHandle函数。
在优先级这里有个例子,基本总结了线程的一些操作。我在这里改写成MFC框架的,一来为了更方便,二来因为MFC自己用的太少了,要多多熟悉一下,毕竟WIN32上面就它和VCL是可以用的开发框架了。
首先来解决一下怎么用MFC搞出一个非模式窗体为主窗体的程序结构来。用默认的对话框向导生成的是模式的,关键点在CwinApp:: InitInstance虚函数中。改为如下代码所示
同时对话框关闭时要调用DestroyWindow,并在PostNcDestroy事件中delete this删除指针。
把主线程要循环处理的代码放入到CwinApp的Idle事件中处理,比较与原程序意图相符。别的部分基本没有什么改动,只是没有用windowsX中的宏,而直接用MFC中的控件类处理之了,相对比较方便点。
下面直接给出源码,对话框资源很简单,一个列表框用来不停计数,两个下拉列表用来控制进程和线程的优先级,一个按钮用来生成另一个线程B,线程B用来停止主线程,并在继续主线程后退出。