RyuLib/RyuLib for Delphi
AsyncTask, 스래드로 비동기 실행을 하고, 결과를 메인 스래드에서 받기
ryujt
2016. 10. 6. 21:33
자주 쓰는 형태인데, 매번 스래드 안에서 PostMessage를 날려서 사용하다보니 불편해서 유닛으로 만들었습니다.
사용법은 아래와 같습니다.
procedure TfmMain.FormCreate(Sender: TObject); begin AsyncTask( // This will execute task asynchronously by new thread without blocking. procedure (AUserData:pointer) begin Sleep(1000 * 3); end, // This will execute by main thread after above code completed. procedure (AUserData:pointer) begin fmMain.Caption := 'Done'; end ); end;
AsyncTask() 함수는 두 개의 익명함수가 필요합니다. 첫 번 째 함수는 별도의 스레드에 의해서 비동기적으로 실행됩니다. 그리고, 실행이 끝나고 난 뒤에는 두 번 째 익명함수가 실행됩니다. 두 번 째 익명함수는 메인 스래드에서 실행되기 때문에 UI 접근을 해도 문제가 되지 않습니다.
AUserData는 AsyncTask(익명함수, 익명함수, UserData) 와 같이 마지막 인자로 넘겨준 포인터 값입니다. 생략하면 nil이 됩니다.
소스는 아래의 링크를 참고하시기 바랍니다.