{------------------------------------------------------------------------------} {µ¥ÔªÃû³Æ£ºReadyThread.pas } {Ä£¿éÃû³Æ£º×¼±¸Ïß³Ì } {Ä£¿é˵Ã÷£ºÏ̴߳´½¨ºó×Ô¶¯ÔËÐУ¬Íê³ÉÁ¸ÖÖÏ·¢ } {½¨Á¢ÈÕÆÚ£º2023-11-08 } {ÐÞ¸ÄÐ޸ģº2023-11-08 } {°æÈ¨ËùÓУºÀîÁ¼Í¥ liangtingli@outlook.com } {------------------------------------------------------------------------------} unit readyThread; interface uses Windows, Classes, SysUtils, PubUtils, DateUtils, ActuatorLib; type TReadyThread = class(TThread) private { Private declarations } t_ret : Integer; //·µ»ØÖµ t_nDatas : array[0..3] of Word; //ÔÝ´æË®·ÖÒÇÊý¾Ý procedure UpdateStartClock; procedure UpdateStopClock; procedure UpdateGrain; procedure UpdateGrainError; protected procedure StartReady(); procedure Execute; override; public constructor Create(param: Boolean=false); procedure Terminate; end; implementation uses uMain, uDM, uInit, uSaveData, Global, log4me; { TReadyThread } //--------Ï̳߳õʼ»¯---------------------------------------- //Ï̳߳õʼ»¯ constructor TReadyThread.Create(param: Boolean=false); begin //Ïß³ÌÍ£Ö¹ºó×Ô¶¯ÊÍ·Å inherited Create(param); //ÉèÖÃÏß³ÌÔËÐÐ, False-×Ô¶¯ÔËÐÐ, True-ÊÖ¶¯Æô¶¯ FreeOnTerminate := True; //ÉèÖÃÏß³ÌÍ˳ö×Ô¶¯Ïú //·µ»ØÖµ t_ret := 0; //³õʼ»¯Ë®·ÖÒÇÊý×é t_nDatas[0] := 0; t_nDatas[1] := 0; t_nDatas[2] := 0; t_nDatas[3] := 0; end; //Ïß³ÌÏú»Ùʼþ procedure TReadyThread.Terminate; begin inherited; m_ReadyThread := 0; //ÇåÀíÏ߳̾ä±ú end; //--------½çÃæ´¦Àíº¯Êý-------------------------------------- //¼ÆÊýÆ÷¿ªÊ¼ procedure TReadyThread.UpdateStartClock; begin //Æô¶¯¼ì²â¼ÆÊ±Æ÷¶¯»­ glStartTest := GetMillisecondTimeStamp; dm.tmManTest.Enabled := true; end; //¼ÆÊýÆ÷½áÊø procedure TReadyThread.UpdateStopClock; begin dm.tmManTest.Enabled := false; frmMain.mtManClock.Value := 0; end; //Õý³£ÏÔʾ--ÐÞ¸ÄÁ¸ÖÖÐÅÏ¢ procedure TReadyThread.UpdateGrain; begin //¸üнçÃæÐÅÏ¢ frmMain.lblManTest.Caption := 'Á¸Ê³Æ·ÖÖÐ޸ijɹ¦£¬×¼±¸¾ÍÐ÷£¡'; end; //³ö´íÏÔʾ--ÐÞ¸ÄÁ¸ÖÖ³ö´í procedure TReadyThread.UpdateGrainError; begin //¸üнçÃæÐÅÏ¢ frmMain.lblManTest.Caption := 'Á¸Ê³Æ·ÖÖÐÞ¸Äʧ°Ü£¬Ë®·ÖÒǹÊÕÏ£¡'; end; //------- Ö´ÐÐÏß³Ì ---------------------------------------- procedure TReadyThread.StartReady(); begin //·µ»ØÖµ t_ret := 0; //Ï·¢Á¸ÖÖÐÞ¸ÄÖ¸Áî Synchronize(UpdateStartClock); t_ret := SendCommands(hWrDev, WR_GOODS, Grain.Code, 3); //ÕâÀïÖ¸Áî×èÈûʱ¼ä=3s Synchronize(UpdateStopClock); if t_ret<0 then begin Synchronize(UpdateGrainError); Exit; end else Synchronize(UpdateGrain); end; //------- Ïß³ÌÈë¿Ú ---------------------------------------- procedure TReadyThread.Execute; begin { Place thread code here } try //Ö´ÐÐ×¼±¸¶¯×÷ StartReady(); //·ÀÖ¹Ïß³Ì×èÈûCPU Sleep(1); finally //ÊÖ¶¯Í˳öÏß³Ì m_ReadyThread := 0; end; end; end.