unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure WMLBUTTONDOWN(var Message : TMessage);Message WM_LBUTTONDOWN;
procedure FormDestroy(Sender: TObject);
private
{ Private declarations }
ThreadID : DWORD;
hThread : THandle;
public
{ Public declarations }
end;
var
Form1: TForm1;
hMutex : THandle;
buf : array[0..100] of integer;
implementation
{$R *.dfm}
function ThreadFunc(Temp : Pointer): DWORD ;stdcall;
var
i : integer;
begin
WaitForSingleObject(hMutex,INFINITE);
FOR i := 0 to 100 do begin
Sleep(30);
buf[i] := i;
if i = 30 then ReleaseMutex(hMutex);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
hMutex := CreateMutex(nil,False,nil);
end;
procedure TForm1.WMLBUTTONDOWN(var Message: TMessage);
var
j : integer;
begin
InvalidateRect(Form1.Handle,nil,True);
UpdateWindow(Form1.Handle);
hThread := CreateThread(nil,0,@ThreadFunc,nil,0,ThreadId);
Sleep(10);
WaitForSingleObject(hMutex,INFINITE);
for j := 0 to 30 do begin
Canvas.TextOut(10,j*20,Format('%D Line is %d',[j,buf[j]]));
end;
ReleaseMutex(hMutex);
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
CloseHandle(hMutex);
end;
end.
백그라운드 뮤텍스인데요..
100까지 다 계산해서 보여 주는 것이 아니라 30까지 계산이 되면 화면에 뿌려줍니다..
잘 작동하는데요..
한가지 질문이 있습니다..
델파이에서는 직접 CreateThread를 사용해서 작성했는데요..
쓰레드를 보호하기 위해서 뮤텍스를 사용했구요..
델파이에서 이렇게 해도 됩니까?
꼭 synchronize사용안해도 됩니까?
위 소스에서 델파이에 적합하지 안는 것이 있나요.. 꼭 답변 부탁합니다..