[英]Delphi, Indy10, How to properly stop and cleanup a readln on a continuous stream
[英]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.