자주 쓰는 형태인데, 매번 스래드 안에서 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이 됩니다.
소스는 아래의 링크를 참고하시기 바랍니다.
Delphi P2P Socket Library (0) | 2017.04.05 |
---|---|
권한 상승 중인 프로그램에서 권한이 낮은 상태로 프로그램 실행시키기 (0) | 2014.10.27 |
Convert Enum to Java (0) | 2014.10.27 |
Scanner.pas (0) | 2014.10.07 |
소스코드에서 문자열만 검색하기 (0) | 2014.10.07 |