小弟第一次写多线程哈 还请多多指教 呵呵
小弟谢了三个线程 这三个线程需要同一时间运行
procedure a.Execute;
begin
while not Terminated do
begin
Synchronize(aa);
Sleep(100);
end;
在函数aa中因为必须的暂停一秒再执行下一条语句 所以有一些sleep(10)(循环100次)
比如:
get(1);
for yanshi := 0 to 100 - 1 do
begin
Sleep(10);
end;
rixi();//中间必须有500毫秒以上的延时才行
可是这样程序很占cpu的使用率 而且程序特容易假死 请问应该怎么写才能达到相应的效果而不假死呢? 谢谢!
小弟谢了三个线程 这三个线程需要同一时间运行
procedure a.Execute;
begin
while not Terminated do
begin
Synchronize(aa);
Sleep(100);
end;
在函数aa中因为必须的暂停一秒再执行下一条语句 所以有一些sleep(10)(循环100次)
比如:
get(1);
for yanshi := 0 to 100 - 1 do
begin
Sleep(10);
end;
rixi();//中间必须有500毫秒以上的延时才行
可是这样程序很占cpu的使用率 而且程序特容易假死 请问应该怎么写才能达到相应的效果而不假死呢? 谢谢!
解决方案 »
- 一个老问题了,数据查询,多多帮忙啊
- 如何动态的创建一个数据表?各位高手请过来帮忙呀!!!!!
- Windows Media Player 9的左右声道控制(卡拉OK功能)
- 3个Delphi6问题
- 请大家帮我把这段BCB代码转换成DELPHI的,谢谢,在线等着
- 有关fastreport的问题
- 编输入法程序中怎样设计自己的数据,怎样定义索引?(来者有分!!!)
- alib component 下载不了,那位大大提供了下!谢谢!
- 浮点型转4字节16进制
- 求Delphi企业版补丁密码和ADO补丁包密码.
- 白送分:关于设置delphi2007中vcl工程窗口标题的问题!
- 用Application.CreateForm创建的主窗口能否自定义构造函数?
begin
Sleep(10);
end;其实跟SLEEP(1000)没多大区别在程序中尽量不要使用SLEEP语句,因为它可能会造成一些不可预知的错误.
既然你需要那么多延迟不如用个定时器来做延迟,在延迟前将这个线程挂起,延迟时间到了再将线程唤醒
如果不想占用CPU资源,可以使用这样一个函数:
Procedure SleepX(ms:Integer) //ms为待暂停的毫秒数
var
StartTime:TDateTime;
begin
StartTime:=Now();//记录开始时的时间
While(MilisecondsBetween(StartTime,Now())<ms) then
begin
Application.ProcessMessage();//让空闲时间去处理主线程,就不会占用当前线程的时间了
end;
end;
//上面的函数有可能拼写错误,请楼主用时检查,使用时需要引用DateUtils单元。