:)简单的说就是,线程一直试着去作某一件事件(比方说:TidTcpServer读一段数据操作),如何没有成功线程一般采取这样的方式 while not (事件作好) do begin 等待一段时间(Sleep(...),当然也可能不等待); 试着再作 end;作为一个健状态的程序(象TCP/IP协议就是这样),一般都还有一个监控程序,去看看时间是否超过了,如果超时,也会写想应的超时标识, 然后退出,大概的模型 如下: while not (事件作好) and (时间还没有到) do begin 等待一段时间(Sleep(...),当然也可能不等待); 试着再作 end;
当你使用Winsock开发网络应用程序时,从Socket中读取数据或者向Socket写入数据都是异步发生的,这样就不会阻断程序中其它代码的执行。在收到数据时,Winsock会向应用程序发送相应的消息。这种访问方式被称作非阻塞式连接,它要求你对事件作出响应,设置状态机,并通常还需要一个等待循环。
你说的“不管有没有数据接收都不停的运行”,可能是其它的一些程序向你的IdTCPServer发送的信息,所以
你在IdTCPServer.OnExecute事件里,要对接收的信息加以验证,不是你要的信息就丢包(Exit)就行了
while not (事件作好) do
begin
等待一段时间(Sleep(...),当然也可能不等待);
试着再作
end;作为一个健状态的程序(象TCP/IP协议就是这样),一般都还有一个监控程序,去看看时间是否超过了,如果超时,也会写想应的超时标识,
然后退出,大概的模型
如下:
while not (事件作好) and (时间还没有到) do
begin
等待一段时间(Sleep(...),当然也可能不等待);
试着再作
end;