如何起一个线程来显示系统时间

wbamboo 2004-09-16 06:06:37
在好多程序的主界面右下方都会显示系统时间,如直接在frmMain上加Timer控件来实现,在子界面上做某种费时的操作时,frmMain上的时间就刷新不了了,各位高手有何好方法?
我的初步设想是起个线程来显示时间,但在线程中如何控制frmMain上的Timer控件并触发其事情就搞不定了,请高手赐教!
...全文
277 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
toperscj 2004-09-17
  • 打赏
  • 举报
回复
restboy(枫)说得有道理
delphi_wo 2004-09-17
  • 打赏
  • 举报
回复
有点炮打苍蝇了
halfdream 2004-09-17
  • 打赏
  • 举报
回复
同意 restboy

思路有些问题,界面的反应应该放在主线程里面,真正需要长时间耗时的操作才应该放在子线程里面处理

angelface 2004-09-17
  • 打赏
  • 举报
回复
用一个线程来显示时间是夸张了点@
lostmyway 2004-09-17
  • 打赏
  • 举报
回复
TTimer 本身就会起一个线程
MainFrm上用TTimer显示当前时间,不会受你子窗体上操作的影响,
不过不清楚你具体怎么做的...

ref:


回复人: vfork(潇湘风情) ( ) 信誉:100 2004-09-17 01:22:00 得分: 0


我是这样做的,没出现你frmMain上的时间就刷新不了的问题!

procedure TMain.Timer1Timer(Sender: TObject);
begin
statusbar1.Panels[1].Text := '日期' + formatdatetime('yyyy年-MM月-dd日',now);
statusbar1.Panels[2].Text := '时间' + timetostr(now);
end;


ghchen 2004-09-17
  • 打赏
  • 举报
回复
不会,帮你替
taoawhitesheep 2004-09-17
  • 打赏
  • 举报
回复
对,在时钟OnTimer事件里面写几句代码就可以了,不必搞那么复杂
wbamboo 2004-09-17
  • 打赏
  • 举报
回复
试了WGYKING(修罗封闭中)(前女友要来看我。。。)的方法,效果也不是很好
谢谢各位,结帐!
restboy 2004-09-17
  • 打赏
  • 举报
回复
思路有些问题,界面的反应应该放在主线程里面,真正需要长时间耗时的操作才应该放在子线程里面处理
htyx 2004-09-17
  • 打赏
  • 举报
回复
同意 WGYKING(修罗封闭中)(前女友要来看我。。。) 的意见。
主要是要想法让系统响应你的消息。
恩,调用存储过程吗。倒是这种耗时的操作应该放到线程中去。否则不但刷新不了时间,只怕操作也不能响应吧。
bxh2dai 2004-09-17
  • 打赏
  • 举报
回复
就上楼上说的,楼住怎么想到线程去了,那样很浪费资源的
wbamboo 2004-09-17
  • 打赏
  • 举报
回复
StatusBar1.Panels.Items[2].Text:='日期:'+datetostr(now());
StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+' ';
StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+'时间:'+timetostr(now());
目前我就是这么做的,并且N年来一直是这么做的,但是子窗口做某种费时操作时主界面上的时间的确是不动了,比如子窗口正在调存储过程,该存储过程汲及几张百万记录级的表.
vfork 2004-09-17
  • 打赏
  • 举报
回复
我是这样做的,没出现你frmMain上的时间就刷新不了的问题!

procedure TMain.Timer1Timer(Sender: TObject);
begin
statusbar1.Panels[1].Text := '日期' + formatdatetime('yyyy年-MM月-dd日',now);
statusbar1.Panels[2].Text := '时间' + timetostr(now);
end;
WGYKING 2004-09-16
  • 打赏
  • 举报
回复
在耗时的代码中加入:
Application.ProcessMessages

它可以强行使系统处理消息
zdq801104 2004-09-16
  • 打赏
  • 举报
回复
起个线程来时时刷新,没有必要吧,老大线程是好东西,但是不要滥用呀
这样实现吧,不过不是线程的代码哦
StatusBar1.Panels.Items[2].Text:='日期:'+datetostr(now());
StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+' ';
StatusBar1.Panels.Items[2].Text:=StatusBar1.Panels.Items[2].Text+'时间:'+timetostr(now());
lw549 2004-09-16
  • 打赏
  • 举报
回复
单独开一个Thread没必要
直接在timer里写就可以了,简单,方便
huangrenguang 2004-09-16
  • 打赏
  • 举报
回复
帮你顶一下

5,385

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧