我有一个TThread类,然后类里面,私有成员指针TIdIcmpClient* ,在构造函数中,new了一个TIdIcmpClient对象出来。因为有十来个线程并发,然后发现,从TIdIcmpClient->ReplyStatus读出的信息,是其它线程的内容。感觉很奇怪,不知道TIdIcmpClient这个控件是不是多线程不安全的。如果不是,请问谁有过多线程使用TIdIcmpClient的经验,谢谢啊
VCL本身不内置多线程支持的。因此一般要使用TThread->Synchronize来处理。
大家好,我在编程时,由于处理工作量较大,所以采用多线程编程,用到vcl对象,故采用Synchronize来进行同步,可采用Synchronize方法后,线程的执行效率明显下降,这是怎么回事?该如何处理啊?
不要把大循环的代码放入 Synchronize 调用的过程,
应该只把那些需要修改VCL的代码出去出来过程一个过程,通过 Synchronize 方式调用
用Synchronize方法的执行 实际上是由主线程完成的,当然效率不高。
把某些界面的操作分离出来放到Synchronize里执行,其他的就不用管,我这样搞后cpu占用率就降到零了,真妙.
博客围绕多线程编程展开,作者使用TThread类,构造函数中new出TIdIcmpClient对象,并发时从其读出的信息异常,怀疑其多线程不安全。还提到使用vcl对象时用Synchronize同步,导致线程执行效率下降,给出了优化建议。

被折叠的 条评论
为什么被折叠?



