Example #1
0
//---------------------------------------------------------------------------
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;
    }
}