簡體   English   中英

帶有超時的Delphi Indy ReadLn

[英]Delphi Indy ReadLn with timeout

一個印地問題。

我在TIdTCPClient ReadLn調用中添加了一個超時參數,因此我的線程可以經常檢查終止。 但是,如果發生超時, ReadLn起,我永遠不會從ReadLn獲取任何數據。 如何重置TIdTCPClient ,使其再次尋找行?

procedure TClientListner.Execute;
var
  msg : String;

begin

  while not terminated do
  begin
    msg := fSocketCon.IOHandler.ReadLn('\n', 200);
    if not fSocketCon.IOHandler.ReadLnTimedOut then
    begin
      DoSomeThing(msg);
    end;
  end;
end;

與C / C ++不同, \\不是轉義字符,因此'\\n'在Delphi中不解釋為換行符。 它是一個實際的2個字符的字符串,一個'\\'字符后跟一個'n'字符。

要將實換行符用作終止符,請改用#10或Indy的LF常數:

msg := fSocketCon.IOHandler.ReadLn(#10, 200);

msg := fSocketCon.IOHandler.ReadLn(LF, 200);

或者,使用一個空白字符串,該字符串告訴ReadLn()使用其默認的LF終止符:

msg := fSocketCon.IOHandler.ReadLn('', 200);

或者,根本不要使用ATimeout參數。 請改用ReadTimeout屬性,然后不指定終止符,因此使用默認的LF終止符:

fSocketCon.IOHandler.ReadTimeout := 200;
...
msg := fSocketCon.IOHandler.ReadLn;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM