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