首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

求指点线程对VCL控件操作的有关问题

2012-03-24 
求指点线程对VCL控件操作的问题。 - C++ Builder / Windows SDK/API因为少用线程,近期恰好要用到线程访问一

求指点线程对VCL控件操作的问题。 - C++ Builder / Windows SDK/API
因为少用线程,近期恰好要用到线程访问一个Memo控件。
其实也就是把线程里面的信息写入Memo。

经常看到vcl是多线程不安全的,我想请问各位前辈,几个线程同时写Memo,问题主要会出现在什么地方?
我尝试用两个线程写信息到Memo,大概两个线程一秒写一次,测试了几次都没发生问题,请问这种做法有什么需要注意的地方?或者说有潜在的隐患只是我暂时还没遇到。

另我用CreateThread创建线程的。

我在bcb6里面,在线程循环里面处理一些数字,如果在没中断情况下退出程序,就会抛出异常。
但是不在IDE环境下就没问题,请问这种异常情况是不是IDE的本身问题?

感谢各位指点!

[解决办法]
http://topic.csdn.net/u/20110213/16/2dc0ac4c-01c4-485d-ae1f-af8047e889f0.html
[解决办法]
帮楼主顶起 最近也在研究线程 有点郁闷
[解决办法]
在线程的说明里不是有例子
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// where UpdateCaption could look like:
//
// void __fastcall aaa::UpdateCaption()
// {
// Form1->Caption = "Updated in a thread";
// }
[解决办法]
对memo的操作你可以封装在函数xxxxx中,然后用
Synchronize(xxxxx);执行

[解决办法]

探讨

在线程的说明里不是有例子
// Important: Methods and properties of objects in VCL can only be
// used in a method called using Synchronize, for example:
//
// Synchronize(UpdateCaption);
//
// wh……

[解决办法]
下面的话是网上找的


CreateThread创建的线程不可能掉用到Synchronize函数,Synchronize函数是TThread类的
一个保护性(protected)类别的函数,只能是其派生类(代码)中才能调用,所以,如果你
自己定义一个从TThread类继承下来的线程类,就可以使用Synchronize函数了。
[解决办法]
自己加锁想必也可
[解决办法]
我是这样处理的。定义个消息节点类,比如
class TMsgItem
{
public: char*msg;
int type;
}
让所有的线程产生的输出变成消息节点类。都存储到一个ObjectList里面。
在单独起一个线程或者定时器来对消息输出。然后从消息列表中删除。
缺点,实时性不好。
但是没有出现过异常
多个线程同时操作控件容易吊死。

[解决办法]
用TThread吧。
[解决办法]
VCL
界面控件不是线程安全的,不建议在线程里面操作,到时候会引起莫名其妙的问题.建议你线程里面处理数据然后发消息给窗体,窗体收到消息在界面上显示.

热点排行