{------------------------------------------------------------------------------} {µ¥ÔªÃû³Æ£ºvreadyThread.pas } {Ä£¿éÃû³Æ£ºÐ£×¼-×¼±¸Ïß³Ì } {Ä£¿é˵Ã÷£ºÏ̴߳´½¨ºó×Ô¶¯ÔËÐУ¬Íê³ÉÁ¸ÖÖÏ·¢ } {½¨Á¢ÈÕÆÚ£º2023-11-09 } {ÐÞ¸ÄÐ޸ģº2023-11-09 } {°æÈ¨ËùÓУºÀîÁ¼Í¥ liangtingli@outlook.com } {------------------------------------------------------------------------------} unit vreadyThread; interface uses Windows, Classes, SysUtils, PubUtils, DateUtils, ActuatorLib; type TvreadyThread = 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 StartVReady(); procedure Execute; override; public constructor Create(param: Boolean=false); procedure Terminate; end; implementation uses uMain, uDM, uInit, uSaveData, Global, log4me; { TvreadyThread } //--------Ï̳߳õʼ»¯---------------------------------------- //Ï̳߳õʼ»¯ constructor TVReadyThread.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 TVReadyThread.Terminate; begin inherited; m_vReadyThread := 0; //ÇåÀíÏ߳̾ä±ú end; //--------½çÃæ´¦Àíº¯Êý-------------------------------------- //¼ÆÊýÆ÷¿ªÊ¼ procedure TVReadyThread.UpdateStartClock; begin //Æô¶¯¼ì²â¼ÆÊ±Æ÷¶¯»­ glStartTest := GetMillisecondTimeStamp; dm.tmVerify.Enabled := true; end; //¼ÆÊýÆ÷½áÊø procedure TVReadyThread.UpdateStopClock; begin dm.tmVerify.Enabled := false; frmMain.mtVerifyClock.Value := 0; end; //--------------------------------------------------------- //Õý³£ÏÔʾ--ÐÞ¸ÄÁ¸ÖÖÐÅÏ¢ procedure TVReadyThread.UpdateGrain; begin //¸üнçÃæÐÅÏ¢ frmMain.lblVerify.Caption := 'Á¸Ê³Æ·ÖÖÐ޸ijɹ¦£¬Ð£×¼¾ÍÐ÷£¡'; end; //³ö´íÏÔʾ--ÐÞ¸ÄÁ¸ÖÖ³ö´í procedure TVReadyThread.UpdateGrainError; begin //¸üнçÃæÐÅÏ¢ frmMain.lblVerify.Caption := 'Á¸Ê³Æ·ÖÖÐÞ¸Äʧ°Ü£¬Ð£×¼¹ÊÕÏ£¡'; end; //------- Ö´ÐÐÏß³Ì ---------------------------------------- procedure TVReadyThread.StartVReady(); 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 TVReadyThread.Execute; begin { Place thread code here } try //Ö´ÐÐ×¼±¸¶¯×÷ StartVReady(); //·ÀÖ¹Ïß³Ì×èÈûCPU Sleep(1); finally //ÊÖ¶¯Í˳öÏß³Ì m_VReadyThread := 0; end; end; end.