FreePascalでマルチスレッド
Javaでマルチスレッドの後なのでFreePascalでマルチスレッドを書いてみようかなーと。
環境:WindowsXP SP3 / FreePascal 2.4.0
{ ThreadEx.pas } unit ThreadEx; {$MODE OBJFPC} interface uses Windows, Classes; type PThreadEx = ^TThreadEx; TThreadEx = class(TThread) private FWait: Integer; FName: String; protected procedure Execute; override; public constructor Create(Wait: Integer; const Name: String); end; implementation constructor TThreadEx.Create(Wait: Integer; const Name: String); begin inherited Create(false); FWait := Wait; FName := Name; end; procedure TThreadEx.Execute; var i: Integer; begin for i := 0 to 10 do begin Sleep(FWait); Writeln(FName, ': ', i); end; end; end.
{ Threads.fpr } program Threads; {$MODE OBJFPC} {$APPTYPE CONSOLE} uses ThreadEx; var t1, t2: TThreadEx; begin t1 := TThreadEx.Create(2000, 't1'); t2 := TThreadEx.Create(1000, 't2'); try t1.WaitFor; t2.WaitFor; Writeln('end'); Readln; finally t1.Free; t2.Free; end; end.
こんな感じかなあ、やっぱり得意な言語で書くと楽しい。
ちなみにObjectPascalは5年近く触ってるけど、TThreadを扱うのはこれが初めてだったりする…… あってるのかなあ。