자주 쓰는 형태인데, 매번 스래드 안에서 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이 됩니다.


소스는 아래의 링크를 참고하시기 바랍니다.






저작자 표시 비영리 변경 금지
신고

Posted by 류종택


티스토리 툴바