运行线程时死机?
我在程序运行时,用一个线程不断的读dll中的数据,代码如下:
//---------------------------------------------------------------------------
void __fastcall TADcj::Execute()
{
do
{
// Application->ProcessMessages();
Synchronize(cj);
} while( !Terminated );
}
//---------------------------------------------------------------------------
void _fastcall TADcj::cj(){
float dat;
dat= VacGetLoadat(); //读取dll中的数值
Frmain->syID.g_ln=dat;
Frmain->LDp->Caption=FormatFloat("0.00",Frmain->syID.g_ln);
}
但总是死机,程序总是在执行线程中,根本跳不到主程序中去,但在线程的do...while中加上Application->ProcessMessages();后又可以正常运行。
我现在不想通,为什么我在《c++builder5编程实例与技巧》的一例子上不加Application->ProcessMessages();线程总能自己跳回主程序,而不会死机,书中部分代码如下:
void __fastcall TSquareThread::Execute()
{
Step = 1;
do
{
X1 = X2;
X2 = X2+Step;
if( X2<160 )
Step = 1;
else if( X2>(Form1->ClientWidth-15) )
Step = -1;
Synchronize(Paint);
// Paint();
} while( !Terminated );
}
//---------------------------------------------------------------------------
void __fastcall TSquareThread::Paint()
{
// 使用窗体的颜色在老地方画一个正方形
Form1->Canvas->Pen->Color = Form1->Color;
Form1->Canvas->Brush->Color = Form1->Color;
Form1->Canvas->Rectangle(X1-5,Y-5,X1+5,Y+5);/**/
// 使用窗体的颜色在老地方画一个正方形
Form1->Canvas->Pen->Color = EColor;
Form1->Canvas->Brush->Color = EColor;
Form1->Canvas->Rectangle(X2-5,Y-5,X2+5,Y+5);
}