小弟第一次写多线程哈 还请多多指教 呵呵
小弟谢了三个线程 这三个线程需要同一时间运行
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的使用率 而且程序特容易假死 请问应该怎么写才能达到相应的效果而不假死呢? 谢谢!
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单元。