请大家帮我想想,谢谢了!(50分)

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

Unregistered / Unconfirmed
GUEST, unregistred user!
最近写一程序需要实现一个错误功能:一个函数出现错误的时候,延时一段时间,然后再重新执行原这个函数,请问我
应该怎么去做呢???
 
采用线程,线程执行函数,如果失败,延时一段时间,利用线程创建新线程,释放自己
 
procedure Delay(D: DWORD);
var Start: DWORD;
begin
Start := GetTickCount;
while GetTickCount - Start <= D do
//死等待
//while GetTickCount - Start <= D do Application.ProcessMessages
//可以处理其他消息
end;
procdure A
begin
try
...
except
delay(1000);
A;
end
end
 
不要用Application.ProcessMessages,这将导致程序走向无法控制。
使用sleep api函数
const MAX_RETRY = 10 //最多重试10次
bResult := False;
iRetry := 0
While (bResult = False) or (iRetry = 0) do
begin
bResult = ....//取执行结果,根据具体需要可使用GetLastError;
if bResult = False then Sleep(3000);
Inc(iRetry)
end;


注:上面的代码没有考虑多线程情况
 
try

except// wrap up
do sth
end;
 
[red]关注。帮你提前吧。呵呵[:D][/red]
 
哦?上面的都不可以吗?是就说过理由嘛。。[:)]
 
to 203010,这种方法是不是消耗系统资源特别利害呢?
to all
我正在试验,,
 
to Adnil,
用sleep也不是办法;
to everbody
我想一个TTIME控件来实现这个方法,比如,函数出错,就启动记时,记时完成再返回,,,
但再具体一点我又没办法解决了,,
 
用线程:)
 
偶想过了,呵呵,给分.
 
你并不想用线程吧,用timer
procedure myproc;
try
函数体
except
on exception do
begin
timer1.enabled := true
end
end;

在timer1的ontimer中
begin
enabled := false;
myproc;
end;
 
谢谢 了!!
 
to Adnil,
不要用Application.ProcessMessages,这将导致程序走向无法控制。
为什么会出现这种情况???我碰上了,,
 
后退
顶部