读书人

atL,多线程有关问题

发布时间: 2012-09-03 09:48:39 作者: rapoo

atL,多线程问题。
控件的线程模型:自由线程
环境:ATL7.0

在ATL内部创建了两个线程,测试时发现debug没有问题,Release时线程A执行第一次成功,执行第二次时内部的变量m的post方法里面发现 this为空。

如果在ATL内部只创建一个线是,变量m的post方法正常。

线程A的伪代码如下:

C/C++ code
vod threadA(){    class1 m;    while(true)    {        m.post();//bug:如果只有一个线程,这上代码没有问题。如果创建threadB这里在Release下就会有问题。post里面的this为空。    }}void threadB(){    }


不知道这个是不是跟线程模型有关。另外查了一下资料(http://topic.csdn.net/u/20090331/15/16200227-F4A2-47E4-AA29-55427C136D64.html),jameshooo兄的回复提到了线程模型的问题,之前是用的套间线程模型STA,只有一个线程时没有问题。

我看jameshooo兄的回复提到多个线程的话,最好要列集一下接口。这个貌似有点复杂。因为线程中使用的一些类是自定义的类,总不能说把这些自定义类全部做成接口吧。

[解决办法]
在线程中加入下面的代码试试
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
[解决办法]
对于公共的变量或缓冲区都要进行同步互斥或临界区设置,不然有可能出错
[解决办法]
post()方法是static的吗?
还有,你的post方法是可重入的吗?如果不是,估计要加锁。就像
inet_ntoa一样。
[解决办法]
探讨
post()方法是static的吗?
还有,你的post方法是可重入的吗?如果不是,估计要加锁。就像
inet_ntoa一样。

读书人网 >VC/MFC

热点推荐