//--------------------------------------------------------------------------- void __fastcall TGetTrackThread::Execute() { while(!Terminated) { while(!DataModule1->bCanAccess.Lock()) { Sleep(20); if(Terminated) return; //結束執行緒 } if(!DataModule1->bCanAccess2.Locked) { try { DiagnoseConnect(); //診斷連線狀況 if(Terminated) { DataModule1->bCanAccess.UnLock(); return; } // Synchronize(CarStatDetect); //偵測車輛的狀態是否合法 CarStatDetect(); if(Terminated) { DataModule1->bCanAccess.UnLock(); return; } Check_If_Update_From_DB(); //偵測是否資料庫有更動 if(Terminated) { DataModule1->bCanAccess.UnLock(); return; } // Synchronize(GetLatestStatus); //取得最新車輛狀態 GetLatestStatus(); if(Terminated) { DataModule1->bCanAccess.UnLock(); return; } Determine_Car_Image_Color(); //決定顯示在螢幕上的車輛顏色 if(Terminated) { DataModule1->bCanAccess.UnLock(); return; } Check_Acknowledgement(); //處理Acknoledge狀況 if(Terminated) { DataModule1->bCanAccess.UnLock(); return; } //ProgressBar1 count if(CallCenter_Main_Form->ProgressBar1->Position < 40) { CallCenter_Main_Form->ProgressBar1->Position += 10; } else { CallCenter_Main_Form->ProgressBar1->Position = 0; } } catch(...) {} } DataModule1->bCanAccess.UnLock(); bCanTerminate = true; TIniFile* ini = new TIniFile(ChangeFileExt( Application->ExeName, ".INI" )); int Freq = ini->ReadFloat("TRACK","FREQUENCY",9); Freq = Freq * 10; delete ini; for(int i=0; i < Freq; i++) { Sleep(100); if(Terminated) return; //結束執行緒 } bCanTerminate = false; } }