首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

多线程定时执行程序如何写

2012-02-13 
多线程定时执行程序怎么写?procedure TSysChatMainForm.TTestNetTimer(Sender: TObject)beginif Internet

多线程定时执行程序怎么写?
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的创建线程等都可以,具体自己搜去吧
[解决办法]

Delphi(Pascal) code
//先写一个函数 用来检测function myThread(p:pointer):boolean;stdcall;begin  while ( 终止条件) do  begin    sleep(3000);    {检测代码}  end;end;
[解决办法]
Delphi(Pascal) code
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. 

热点排行