如何用线程实现类似timer的功能?

cjf1009 2005-01-08 02:24:35
我想在一个线程里实现监控的目的,比如监控一个listview里面每行内容(算是个队列吧),如果不为空则开启一个处理线程。
我原来是用timer实现的,可觉得当listview为空时很浪费资源。我觉得用线程实现更好些,可不会。希望那位大哥能给些帮助。
...全文
230 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
cg2004ren 2005-01-15
  • 打赏
  • 举报
回复
我在Delphi6线程中:
Application.CreateForm(TForm2, Form2);
Form2.ShowModal;
为什么编译时没错,运行老出错啊???
cjf1009 2005-01-14
  • 打赏
  • 举报
回复
如果我开了一个等待线程,怎么控制超时的时间?

unsigned(僵哥) :也是用你说的那种方法实现吗?那是在循环看时间差的吧。

能不能让程序在那里等待,直到超时触发超时退出?
neo40 2005-01-12
  • 打赏
  • 举报
回复
可以捕捉Listview的消息
aiirii 2005-01-12
  • 打赏
  • 举报
回复
<<delphi 深度歷險>>中, 說得比較多, 可以參考, 或者到書店翻翻
劣势 2005-01-12
  • 打赏
  • 举报
回复
2个线程
做一监听标志 bTerminate
在其中监听的线程的Excute事件
while bTerminate do
Synchronize(执行事件)
僵哥 2005-01-12
  • 打赏
  • 举报
回复
另外线程记时器执行代码最好写成一个函数,然后在Execute用Synchronize调用。
僵哥 2005-01-12
  • 打赏
  • 举报
回复
...Execute;
Var
startT:int64;//起始时间
endT:int64; //当前时间
Freq:int64; //
begin
QueryPerformanceCounter(startT);
QueryPerformanceFrequency(Freq);
while not Terminated do
begin
QueryPerformanceCounter(endT);
if (endT-startT)/Freq>=1 then //(endT-startT)/Freq得到的值的单位是Seconds
//为防止因线程阻塞等问题引起超时
//而不能预期重置记时器所以使用'>='
begin
//线程记时器代码
//
QueryPerformanceCounter(startT);//开始新一轮记时
end;
Sleep(10); //Sleep( milliseconds:Cardinal)的milliseconds最好大于0
end;
end;
mqjshanghai 2005-01-12
  • 打赏
  • 举报
回复
帮你顶,我留个名,也许以后用的到
cjf1009 2005-01-12
  • 打赏
  • 举报
回复
while not Terminated do

有点启示了,再顶。消息队列是怎么回事?
linkyou 2005-01-11
  • 打赏
  • 举报
回复
写一个函数如procedure forlistview;
然后在线程的
procedure Route1.Execute;
begin
while not Terminated do //这里可以保证不停循环监控类似timer功能
begin
forlistview; // Synchronize(
end;
end;
pdbird 2005-01-11
  • 打赏
  • 举报
回复
监控一个listview里面每行内容,这还是要用到计时器的。
你可以在计时器的事件里新建线程。
在线程里写处理。
cjf1009 2005-01-11
  • 打赏
  • 举报
回复
那位给点代码呀,顶
cangwu_lee 2005-01-10
  • 打赏
  • 举报
回复
有时间做个比较看看,:P
cjf1009 2005-01-10
  • 打赏
  • 举报
回复
其实我就是想做一个监听线程,有个什么“消息队列”和什么“线程池”的说法,我不知道是怎么实现的,不知道哪位能给我讲一下呀
万年水母 2005-01-08
  • 打赏
  • 举报
回复
不明白为什么你这样做,如果要做线程timer,我记得有第三方控件可以实现,AppControls Suite里有TacAccurateTimer。

要监控其实不应该用定时器,如果有某个函数很久才返回,又无timeout之类的处理方法,那程序的稳定性就很危险了,特别是在和数据库有关的程序里,因为数据库的连接,读写都会有不可预见的隐藏问题。

要自己写代码,可以参考以下这贴里我的回答,里头有在线程里处理消息的代码

http://community.csdn.net/Expert/topic/3703/3703275.xml?temp=.9809229
#### 收益: 学习《optee系统开发精讲 》套餐的收益如下:1、全体系的掌握optee的核心知识点(多核多线程、启动流程、各类API、TA/PTA/STA、driver、service、各类设计思想、内存管理、中断管理...);2、掌握TEE OS的设计核心思想(不限与optee,对其它TEE也是如此),能够进入软件架构层次的各项设计;3、快速熟悉大系统软件的各项组件,能够进行大系统软件之间的设计或排查问题4、学习和理解理解Armv8/Armv9架构、Trustzone架构5、技术水平提升N个level, 掌握快速的学习方法;#### 课程简介和大纲 该课程包含但不限与以下章节:optee的组件介绍optee os启动流程optee os的初始化流程optee os线程向量表及其作用进入optee os的八种方式optee os的异常向量表和设计模型optee os对irq中断的处理optee os对fiq中断的处理optee os的内存管理optee os的MMU的使用optee os的根密钥(信任根)optee os的RPC机制optee os的存储系统optee os的SFS系统optee os的RPMB机制的实现optee os的Timer实现optee os中实现的GP APIoptee os中的系统调度optee os中密码学函数的支持optee os中的线程调度CA/TA的开发模型optee os中的serviceoptee os中的 PTAoptee os中的 secure driveroptee os中的 Early TAoptee中spinlock的实现原理详解optee中mutex的实现方式optee的栈指针和栈内存的介绍optee中使用虚函数(平台客制化)的设计模型共享内存的介绍optee os的标准错误码TA的签名和验签TA链接静态库的方法

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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