循环中使用GetTickCount,程序经常不响应.代码如下:(300分)

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

skyjacker

Unregistered / Unconfirmed
GUEST, unregistred user!
循环中使用GetTickCount,程序经常不响应.代码如下:

T:=GetTickCount;
while ((GetTickCount-T)<50) do
begin
Application.ProcessMessages;
if bWaitRecv then
Break;
end;

使用单步调试发现,执行完T:=GetTickCount;程序经常不响应. 有时过一段时间才会执行到 while ((GetTickCount-T)<50) do.

这段代码在线程里:

procedure TCycThread.Execute;
begin
{ Place thread code here }
mycyc;
end;
 
轮询的是RS232转485接口。

如果485口有其他非法数据,则很容易无响应。使用的是mscomm控件。发送和接收。

窗体显示无响应,但是能够用鼠标拖动。
 
去掉 Application.ProcessMessages 试试. 线程里面用好象有点问题 (因为你里面又用了多次GetTickCount)
 
while的条件建议改一下.

判断是否有线程当中的bWaitRecv是否为真(即退出了) while 一直为真,再取值GetTickCount-t进行判断是否循环
 
T:=GetTickCount;
while ((GetTickCount-T)<50) do //这里的GetTickCount要在50以内不然死循环了。这里应该是错误的
begin
Application.ProcessMessages;
if bWaitRecv then
Break;
end;
 
while ((GetTickCount-T)<50) do //这里的GetTickCount要在50以内不然死循环了。这里应该是错误的 ----->不会吧,顶多不执行循环.


今天发现执行 mscomm.output 是死机了。
 
多人接受答案了。
 

Similar threads

后退
顶部