我做了个主界面,上面放了计时器,当计时器到整点时触发一个线程
让他给我检索数据库中数据。
结果是当线程在检索数据库时,计时器也停了,直到线程检索完毕。
请教高手
让他给我检索数据库中数据。
结果是当线程在检索数据库时,计时器也停了,直到线程检索完毕。
请教高手
解决方案 »
- combobox问题~~~~~~~
- delphi QR报表问题,欢迎大家讨论
- 请教个问题,一个textfile文件如何清除里面的内容??
- 请问哪位朋友知道如何注册两个热键?[内附一非常简单清晰的注册一个热键的例子,请点击进去查看]
- 除了SQL SERVER 还有什么数据库是网络数据库,而且可以在安装软件时连数据库装上的?
- 有谁知道PageControl中页如何的动态创建??
- 如何将RICHEDIT中的图片取出
- 怎样在toobar的toolbutton上加图标?
- 一個顯示自定義對話框的函數地址錯誤﹗怎么辦﹖
- 如何利用ODBC将DATESET中的数据转到EXCEL表中?(本人菜鸟水平/描述越详细越好/参与给分)
- 开贴1问:关于 Assign 方法
- list index out of bounds(-1)?错误原因?
{
开始你的线程操作
}
Timer1.Enabled:=True;
unit uMain;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, uTDataManagerThread;type
TForm1 = class(TForm)
CurTimer: TTimer;
edtCurTime: TEdit;
RunTimer: TTimer;
edtRunTime: TEdit;
procedure CurTimerTimer(Sender: TObject);
procedure RunTimerTimer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.CurTimerTimer(Sender: TObject);
var
stime : string;
begin
DateTimeToString(stime,'yyyy-mm-dd hh:nn:ss',Now);
edtCurTime.Text := stime;
end;procedure TForm1.RunTimerTimer(Sender: TObject);
var
stime : string;
begin
DateTimeToString(stime,'yyyy-mm-dd hh:nn:ss',Now);
if stime=edtRunTime.Text then
DMT := TDataManagerThread.Create(False,'runDB');
end;end.//运行线程
unit uTDataManagerThread;interfaceuses
Classes;type
TDataManagerThread = class(TThread)
private
{ Private declarations }
DataManager: TDataManager;
procedure Run();
protected
procedure Execute; override; public
constructor Create(Suspended:Boolean; Param:string); end;implementation
uses
uMain;constructor TDataManagerThread.Create(Suspended: Boolean; Param: string);
begin
inherited Create(Suspended);
if Param = 'runDB' then
Flag := 1
DataManager := TDataManager.Create(nil) ;
FreeOnTerminate:=false;end;procedure TDataManagerThread.Run;
begin
if flag=1 then
begin
//检索数据库;
end;
end;procedure TDataManagerThread.Execute;
begin
{ Place thread code here }
Synchronize(Run);
end;end.
一个是走当前时间,另外3个纪录下次运行时间,如果当前时间
与3个中某一个相等,就调用线程,根据flag的不同来区别。
数据库很大,有1000万以上的纪录。
我现在的方法是写了一个数据库连接和检索的类。
procedure TDataManagerThread.Run;
begin
if flag=1 then
begin
//调用检索函数;
end;
end;