好搞笑啊,TThread类居然不是线程安全的!(0分)

C

com

Unregistered / Unconfirmed
GUEST, unregistred user!
做了个COM组件里面使用了TThread,当被一个多线程的程序调用时错误百出,
百思不得其解,看了一下TThread的源码,发现用了N多的全局变量,我考!
 
你线程里再启动线程要注意同步,这应该没有什么问题,
不过我不知道你的具体意思?
 
TThread的全局变量处理是安全的,TThread绝对没有问题
-----
http://www.8421.org
 
不要妄下结论,activeform其实也是com的一种,我在调用线程时,也发现同样的问题
 
你对线程类Tthread的理解可能有偏差
 
我想应该是TThread和Com Thread模型的匹配问题,没搞懂Com的
 
支持bluely的看法,TThread本来就是用来控制线程的,但不是用来随时随地(即随便在哪里)控制线程的
 
很显然,是你们对我提的问题理解有偏差
 
问题本身提得不明确
>>做了个COM组件里面使用了TThread,当被一个多线程的程序调用时错误百出
COM组件里使用了TThread,然后又被一个多线程程序调用??? 如何理解
>>看了一下TThread的源码,发现用了N多的全局变量
Thread使用全局变量是很正常的,不是导致你出错的原因
我想问题可能出在你在线程里使用COM组件没有初始化,COM组件是否是在线程里动态创建的,
如果答案其中一个是否,那错误百出是很正常的.
 
我的意思是这个com组件是在一个多线程的程序中使用的。
而我的com组件也需要用到多线程,当这个com组件在被调用的程序的主线程中使用时没有
任何问题,可在非主线程中就完蛋了。
实际问题就是Synchronize时那个SendMessage引起的,那个window是个全局变量,处理同步用的。
可那并不是个VCL的window啊,不知道为什么也不行,怪。
 
补充,这个com组件在调用它的主程序中的每一个线程中都要被create一个新的实例。
这个和ActiveForm差不多。
 
我正好有此疑问,来听听课。随便UP一下
 
呵呵。向上顶顶。看还有没有人发高招。
 
SendMessage到什么地方
 
你的问题很可笑啊。你在Com组件中创建了一个线程,又被一个线程调用。。。
你这样做有什么意义呢?
 
TThread类本来就有问题。不小心用的话问题很多,不知哪位大侠能总结一下使用要点。
 
smao,你真可笑,com组件当然是给别人用的,我自己在线程里调他玩什么
 
COM:
不知道这个问题在D6里有没有改进呢,D5是通过发消息来同步的,D6使用了临界和事件同步的,
你在代码在D6里运行看看有没有问题呢,
 
好。有意思。看了这个问题,我开始是如坠云中,再看一通讨论,我又是一头雾水。
如果 com 大侠的 com 组件,在每个线程里都被创建一次,写这个 com 组件来做什么?
com 组件是一个 vcl 组件吗?即便您当它是 vcl 组件,Delphi 就是使用 vcl 的,使用
Delphi 提供的 TThread 老是有点逻辑上的脑筋急转弯,却实实在在没有您说的问题。
翻前面的帖子,好象 程云 有对 TThread 的抱怨,后来也没听到他最后怎么解释的,但我
是看了他的帖子的,实在是他的问题比较复杂,我的脑子不够用,所以没有去回答,您可以
向 程云 问问您的问题,看看他有没有时间回答一个结果来。
 
我测试了一下,在非主线程里创建使用了Synchronize函数的线程没发现什么问题。
不过没用到com。
 
顶部 底部