多线程定时执行程序怎么写?
procedure TSysChatMainForm.TTestNetTimer(Sender: TObject);
begin
if InternetGetConnectedState(nil, 0) = false then
begin
Data.UserOff('[脱机]',false);
bsTrayIcon.ShowBalloonHint('网络异常','由于网络异常,程序掉线!',bsbitInfo);
end;
end;
对多线程不了解,想请教下:如何把上面用Timer控件做的定时检测改成多线程形式?每3秒执行一次
程序关闭应如何释放此线程等?
[解决办法]
方法很多,用getticketcount,sleep或者CreateWaitableTimer
很久以前研究过,差不多都忘了,百度吧
不过这些都不是精确方法,只是一个概念时间
[解决办法]
简单的做法是
执行线程程序前,将timer的Enable=false
线程程序执行完后,timer的Enable=true
至于释放的问题,和你用timer前一样。
但存在一个问题,如楼上所说,不是太精确,但基本上还可以。比如设10秒,一般不会变成20秒,呵呵。
[解决办法]
你这个用timer足以了,如果用线程,TThread,以及api的创建线程等都可以,具体自己搜去吧
[解决办法]
//先写一个函数 用来检测function myThread(p:pointer):boolean;stdcall;begin while ( 终止条件) do begin sleep(3000); {检测代码} end;end;
[解决办法]
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TSysChatMainForm = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } FTestNetThread: TThread; public { Public declarations } end;var SysChatMainForm: TSysChatMainForm;implementation{$R *.dfm}type TTestNetThread = class(TTHread) procedure Execute; override; procedure RefreshUIInMainThread; end;{ TTestNetThread }procedure TTestNetThread.RefreshUIInMainThread;begin bsTrayIcon.ShowBalloonHint('网络异常','由于网络异常,程序掉线!',bsbitInfo);end;procedure TTestNetThread.Execute;begin inherited; FreeOnTerminate := True; while (not Terminated) and (not InternetGetConnectedState(nil, 0)) then begin Data.UserOff('[脱机]',false); Synchronize(RefreshUIInMainThread); Sleep(3000) end;end;{ TSysChatMainForm }procedure TSysChatMainForm.FormCreate(Sender: TObject);begin FTestNetThread := TTestNetThread.Create(False);end;procedure TSysChatMainForm.FormDestroy(Sender: TObject);begin FTestNetThread.Terminate;end;end.