TIdSync
및 TIdNotify
는 익명의 절차/기능을 지원하지 않습니다 (그리고 그들은 당신이 비 RTL 작업 할 때하는 TThread
객체를 필요로하지 않는 정적 과부하가 스레드). 예를 들어 :
procedure TMyThread.Execute;
begin
...
Synchronize(
procedure
begin
SomeFunction(Param1, Param2, Param2);
end
...
Queue(
procedure
begin
SomeFunction(Param1, Param2, Param2);
end
);
...
end;
// CreateThread() procedure
function MyThreadProc(pv: Pointer): DWORD; stdcall;
begin
...
TThread.Synchronize(nil,
procedure
begin
SomeFunction(Param1, Param2, Param2);
end
);
...
TThread.Queue(nil,
procedure
begin
SomeFunction(Param1, Param2, Param2);
end
);
...
Result := 0;
end;
TIdSync
는 TThread.Queue()
단지 래퍼입니다 TThread.Synchronize()
및 TIdNotify
단지 래퍼입니다. 모든 TThread
을 사용할 수 있었던시기에 비 익명의 비 익명의 Synchronize()
메서드가 도입되었습니다. TThread
에 정적 메서드 및 익명 프로 시저가 도입되어 이제는 TIdSync
및 TIdNotify
이 수행하도록 설계된 모든 작업이 수행되어 관련성이 낮아집니다 (물론 여전히 작동합니다).
감사합니다. 좋은 정보. 늦은 답변 죄송합니다. 그러나 'SomeFunction'은 예상대로 실행되지 않습니다. 'SomeFunction' (또는'SomeFunction'가 가끔씩 실행 됨)에 의해 수신되지 않는 패킷들입니다. 또한 'SomeFunction'은 TIdSync 접근 방식과 함께 훌륭하게 작동했습니다. 또한 그것은 Synchronize와 함께 작동했습니다. 내가 마지막으로 코멘트에있는이 [link] (http://delphi.about.com/b/2011/04/14/synchronizing-threads-and-gui-in-delphi-application.htm)에서 약간 검색했습니다. 마이클 슈넬 (Michael Schnell)의'TThread.Queue'에 대한 통지이지만, 어떻게 돌봐야하는지 이해하지 못합니다. 감사. – SAMPro
'TIdSync'는 단순히'TThread.Synchronize()'를 호출합니다. 'TThread.Queue()'는'TThread.Synchronize()'가 사용하는 것과 같은 큐를 사용합니다. 그들은 둘 다 메인 쓰레드가 여유있게 처리 할 수 있도록 글로벌 대기열에 요청을 보냅니다. 그래서'SomeFunction()'이 호출되지 않으면 메인 쓰레드는 동기화 요청을 처리하지 않고'TThread','TIdSync' 및'TIdNotify'에 똑같이 영향을 미칩니다. –