TOmniEventMonitor
없이 작업을 어떻게 실행할 수 있습니까? 그것없이 시작하면 주 스레드가 멈 춥니 다. OmniThreadLibrary
은 TThread
을 기반으로하기 때문에 어떤 의미가 없습니다. UnObserved
은 같은 것을 내부 복사본으로 만들기 때문에 실제로이 문제를 해결하지 못합니다.TOmniEventMonitor없이 실행
type
TWorker = class(TOmniWorker)
function Initialize: Boolean; override;
constructor Create;
end;
begin
var
Task: IOmniTaskControl;
begin
Task := CreateTask(TWorker.Create()).Run; // blocks main thread
Task := CreateTask(TWorker.Create()).UnObserved.Run; // will create internal monitor each time
Task := CreateTask(TWorker.Create()).OnTerminated().Run; // will create internal monitor each time
end.
내가 TThread
을 작성하는 경우는 "모니터"어떤 종류를 필요로하지 않으며, 어느 주 스레드를 차단하지 않습니다. 나는 어떤 종류의 메시지도 보내지 않고 있는데 왜 "모니터"가 필요한가?
일부 코드는 여기에 도움이 될 것입니다 ... –
질문을 올바르게 이해하고 있다면 모니터가 필요하지 않습니다. IOmniTask를 반환하는 변수에 CreateTask의 결과를 저장하지 않으면 모니터 만 필요합니다 ... Delphi가 열려 있지 않아 메모리에서 입력하고 있습니다. – Graymatter
다음을 읽어보십시오 : http://www.thedelphigeek.com/2009/11/omnithreadlibrary-patterns-task.html – gabr