Floor66
03-20-2011, 08:42 PM
Program New;
Var
MyNumber, MyNumber2, StartTime, i : Integer;
Stop : Boolean;
frmDesign : TForm;
Threads : Array Of TTimer;
procedure DoNumber(Sender : TObject);
var
i : Integer;
begin
Inc(MyNumber);
i := MyNumber;
WriteLn('Thread[1] :: Inc :: '+ IntToStr(i));
if MyNumber = 10 then
Stop := True;
end;
procedure DoNumber2(Sender : TObject);
var
i : Integer;
begin
Dec(MyNumber2);
i := MyNumber2;
WriteLn('Thread[2] :: Dec :: '+ IntToStr(i));
if MyNumber2 = 0 then
Stop := True;
end;
procedure ShowTimeRunning(Sender : TObject);
var
i : Integer;
begin
i := (GetSystemTime - StartTime);
Disguise('Thread[0] :: Time Running :: '+ IntToStr(i) +' ms');
end;
procedure InitThreads;
var
i : Integer;
begin
for i := 0 to High(Threads) do
Threads[i] := TTimer.Create(frmDesign);
end;
procedure InitForm;
begin
frmDesign.Create(nil);
end;
procedure SafeInitForm;
var
v : TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('InitForm', v);
end;
procedure SafeInitThreads;
var
v : TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('InitThreads', v);
Threads[0].OnTimer := @ShowTimeRunning;
Threads[0].Interval := 1;
Threads[0].Enabled := True;
Threads[1].OnTimer := @DoNumber;
Threads[1].Interval := 10;
Threads[1].Enabled := True;
Threads[2].OnTimer := @DoNumber2;
Threads[2].Interval := 10;
Threads[2].Enabled := True;
end;
begin
SetArrayLength(Threads, 3);
MyNumber2 := 10;
StartTime := GetSystemTime;
try
SafeInitForm;
SafeInitThreads;
finally
frmDesign.Free;
for i := 0 to High(Threads) do
begin
Threads[i].Enabled := False;
Threads[i].Free;
end;
except
WriteLn(ExceptionToString(ExceptionType, ExceptionParam));
end;
repeat
Wait(10);
until(Stop);
WriteLn('We stopped!');
end.
I'm trying to do that multithreading thingy again (if any of you remembers from years back) :P
Anyway, this compiles but gives me the error: "Error: Could not call proc at line 95".
I'm clueless
Var
MyNumber, MyNumber2, StartTime, i : Integer;
Stop : Boolean;
frmDesign : TForm;
Threads : Array Of TTimer;
procedure DoNumber(Sender : TObject);
var
i : Integer;
begin
Inc(MyNumber);
i := MyNumber;
WriteLn('Thread[1] :: Inc :: '+ IntToStr(i));
if MyNumber = 10 then
Stop := True;
end;
procedure DoNumber2(Sender : TObject);
var
i : Integer;
begin
Dec(MyNumber2);
i := MyNumber2;
WriteLn('Thread[2] :: Dec :: '+ IntToStr(i));
if MyNumber2 = 0 then
Stop := True;
end;
procedure ShowTimeRunning(Sender : TObject);
var
i : Integer;
begin
i := (GetSystemTime - StartTime);
Disguise('Thread[0] :: Time Running :: '+ IntToStr(i) +' ms');
end;
procedure InitThreads;
var
i : Integer;
begin
for i := 0 to High(Threads) do
Threads[i] := TTimer.Create(frmDesign);
end;
procedure InitForm;
begin
frmDesign.Create(nil);
end;
procedure SafeInitForm;
var
v : TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('InitForm', v);
end;
procedure SafeInitThreads;
var
v : TVariantArray;
begin
SetArrayLength(v, 0);
ThreadSafeCall('InitThreads', v);
Threads[0].OnTimer := @ShowTimeRunning;
Threads[0].Interval := 1;
Threads[0].Enabled := True;
Threads[1].OnTimer := @DoNumber;
Threads[1].Interval := 10;
Threads[1].Enabled := True;
Threads[2].OnTimer := @DoNumber2;
Threads[2].Interval := 10;
Threads[2].Enabled := True;
end;
begin
SetArrayLength(Threads, 3);
MyNumber2 := 10;
StartTime := GetSystemTime;
try
SafeInitForm;
SafeInitThreads;
finally
frmDesign.Free;
for i := 0 to High(Threads) do
begin
Threads[i].Enabled := False;
Threads[i].Free;
end;
except
WriteLn(ExceptionToString(ExceptionType, ExceptionParam));
end;
repeat
Wait(10);
until(Stop);
WriteLn('We stopped!');
end.
I'm trying to do that multithreading thingy again (if any of you remembers from years back) :P
Anyway, this compiles but gives me the error: "Error: Could not call proc at line 95".
I'm clueless