关于c++builder线程问题。
我在写线程的时候这个createThread
执行2次时没有问题但是执行第三次时程序突然自动关闭了。
不知道为什么?
请指教。
__fastcall TMyThread::TMyThread(bool CreateSuspended):TThread(CreateSuspended)
{
j+=1;
Form1->Edit2->Text=j;
}
__fastcall TMyThread::~TMyThread()
{
}
void __fastcall TMyThread::Execute()
{
int i;
for (i = 0; i < 90000; i++) {
i+=1;
Form1->Edit1->Text=i;
}
}
int cnt;
void __fastcall TForm1::createThread(TObject *Sender)
{
MyThread = new TMyThread(false);
cnt+=1;
Edit3->Text= cnt;
}
[解决办法]
同步问题,参考Thread的Synchronize方法
[解决办法]
在线程中不能直接更新 Form 上的控件,必须使用 Synchronize 进行同步
[解决办法]
差不多是这样写:
class TMyThread : public TThread {
private :
int m_nValue1;
void __fastcall ShowValue1();
};
void __fastcall TMyThread::ShowValue1() {
Form1->Edit1->Text = m_nValue1;
}
void __fastcall TMyThread::Execute() {
int i;
for (i = 0; i < 90000; i++) {
i+=1;
m_nValue = i;
Synchronize(ShowValue1);
}
}
DWORD __stdcall AThread(LPVOID) {
int i;
for (i = 0; i < 90000; i++)
{
i+=1;
Form1->Edit1->Text=i;
}
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
DWORD threadid1;
HANDLE ht=CreateThread(NULL,0,AThread,NULL,0,&threadid1);
CloseHandle(ht);
}