您的位置:首页 > 其它

worker线程建立方法的区别

2005-10-02 16:49 211 查看
从MSDN中看来,创建Worker线程有两种不同的办法.一个是用CWinThread,一个用AfxBeginThread来启动一个线程函数.
实际上这两个办法,看上去是没有多少区别的.只是很多的编程书上大多提到了用AfxBeginThread+一个线程函数来创建线程的办法.对于怎么用CWinThread来做同样的是,大多没有提到.
AfxBeginThread函数启动Thread和用CWinThread启动线程的区别.这两个方法的最终结果是一样的.特别是在使用worker线程的时候.只不过是实现过程有点不同而已.

主要的区别在于:

1.如果线程里面有线程处理数据类的话,类的this指针的出现时候不一样.
一般来说用CWinThread类的话,会把数据处理过程放在CWinThread的派生里面.或者用CWinThread的派生作为一个入口.而用CWinThread类来启动worker线程的话,一般要先有有

一个CWinThread的this指针,换句话说CWinThread的this指针是在线程启动之前就准备好了.然后再由线程函数传递给CWinThread的一个实例.
而用AfxBeginThread直接启动一个worker线程的话,这个this指针的存在就可有可无了.如果一定有this指针的话,就是在线程函数里面对一个自定义的线程数据处理类进行实例化的

this指针了.
2.对于消息的处理,如果你的worker线程有很多数据要同界面进行交互操作.那么一般来说CWinThread可以用消息循环同界面线程来进行通讯,也可以同子线程进行通讯.
如果对于用AfxBeginThread启动的worker线程要同界面线程来进行交互,一般只能把界面线程的this指针做为一个参数传递给worker线程.然后在worker线程里面直接操作界面线程

的元素.或者也可以用SendMessage来同界面线程进行通讯.但是worker线程之间的通讯就会有些问题.可能可以进行一些简单的数据的传送(同界面线程,进行数据同步)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: