线程(100分)

  • 主题发起人 主题发起人 sgaoyulong
  • 开始时间 开始时间
S

sgaoyulong

Unregistered / Unconfirmed
GUEST, unregistred user!
本人想做一个程序的提醒功能,须不断查询是否要提醒,因为在主线程里写程序像死了一样,请问能不能在别的线程加一查询,显示提醒窗口.本人对多线程了解不多,希各位大侠指教.
 
可以,一旦发现了就用消息提醒主程序,我就做过类似的程序:一旦发现其他程序输入错误就会报警
 
我要是怎样提醒主程序
 
有没有例子看看
 
通过系统对象进行同步操作
你也可以直接在线程中显示提示窗体
这样主程序还可以干别的
 
我是这样做的,但在线程里显示Modal窗体老是出现内存错误
 
FreeonTerminate:=True;
i:=0 ;
while 1<2do
begin
i:=i+1;
sleep(30000);
dm.DtCC_hint1.Active:=false;
dm.DtCC_hint1.SQL.Text:=' SELECT CC_Hint.p_na, CC_Hint.worktime, CC_Hint.title, CC_Hint.hinttime, '+
' dbo.CC_Hint.remark, cc_hintperson.p_name, CC_Hint.msgid '+
' FROM CC_Hint left outer JOIN '+
' cc_hintperson ON CC_Hint.msgid = cc_hintperson.msgid '+
' where left(convert(varchar,CC_Hint.hinttime,108),5)='''+formatdatetime('hh:mm',now)+''''+
' and cc_hintperson.p_no='+inttostr(untdm.vCurUserID);
dm.DtCC_hint1.Active:=true;
dm.DtCC_hint1.First ;
while (not dm.DtCC_hint1.Eof)do
begin
if Terminated then
break;
frmhintrun.cxTextEdit1.Text:=dm.DtCC_hint1.fieldbyname('p_na').asstring ;
frmhintrun.cxTextEdit2.Text:=dm.DtCC_hint1.fieldbyname('p_name').asstring ;
frmhintrun.cxTextEdit3.Text:=formatdatetime('hh:mm',dm.DtCC_hint1.fieldbyname('worktime').asdatetime);
frmhintrun.cxTextEdit4.Text:=dm.DtCC_hint1.fieldbyname('title').asstring ;
frmhintrun.cxMemo1.Lines.Text:=dm.DtCC_hint1.fieldbyname('remark').asstring ;
frmhintrun.Left:=screen.Width-frmhintrun.Width ;
frmhintrun.top:=screen.Height -frmhintrun.height-30 ;
frmhintrun.ShowModal;
// frmhintrun.BringToFront ;
dm.DtCC_hint1.Next ;
end;
end;
 
如果时间要求不是很严格,直接在主线程写就可以了
用一个定时器,里面写如下代码
begin
if Form1.Visible = True then
Exit;
Form1.ShowModal;
Application.ProcessMessages;
end;
其中Form1是你的提示窗体
 
最好不要在线程里用sleep.
在主线程里用一个timer,定时开线程,在线程里查询是否需要提醒.
 
Timer控件本身就是一个线程,用它应该就OK。
 
TTimer 不是什么线程.
 
后退
顶部