请问多线程访问VCL组件行不行?
下面是我在网上找一个代码,在我的电脑上运行有时出错,但我我不知道是什么原因?
用BCB写一个最简单的多线程
//.cpp中的线程描述
_fastcall TMyThread::TMyThread(void):TThread(true)
{
FreeOnTerminate=true;
Resume();
}
//声明线程
void __fastcall TMyThread::Execute()//线程功能
{
for(int i=1;i <4;i++)
Form1-> Memo1-> Text=Form1-> Memo1-> Text+IntToStr(i)+ "我得到了参数--我的线程\r\n ";
}
void __fastcall TForm1::Button2Click(TObject *Sender)//执行线程
{
MyThread=new TMyThread();
MyThread-> FreeOnTerminate=true;
}
//.h中的线程类定义
//声明线程
class TMyThread:public TThread
{
public:
__fastcall TMyThread(void);
private:
void __fastcall Execute(void);
};
//可以在.h的窗体类定义中加入
TMyThread *MyThread;//声明一个自己的线程
[解决办法]
这句话应该放在Synchronize里调用
Form1-> Memo1-> Text=Form1-> Memo1-> Text+IntToStr(i)+ "我得到了参数--我的线程\r\n ";
[解决办法]
VCL组件 决大部分都不是 线程安全的 所以应该防在Synchronize里调用
[解决办法]
Synchronize 调用
[解决办法]
或者 用 postmessage sendmessage
你就传个 整数 i 而已