Log in

View Full Version : TTimers in Simba?



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

TomTuff
03-20-2011, 08:45 PM
isnt it try..except..finally? not try..finally..except, like in your script.

Train
03-20-2011, 08:45 PM
Inc and Dec don't work in Simba from my experience.
use + 1, - 1. However, you will sacrifice speed.

Harry
03-20-2011, 08:46 PM
Inc and Dec don't work in Simba from my experience.
use + 1, - 1. However, you will sacrifice speed.
Inc and Dec work wonderfully for me...

Train
03-20-2011, 08:48 PM
Inc and Dec work wonderfully for me...

I always get a could not call proc, :mad:.

Floor66
03-20-2011, 08:51 PM
isnt it try..except..finally? not try..finally..except, like in your script.

I took that bit from MSI ;)

And for the record, changing the Inc/Decs didnt do anything :p

Sabzi
03-20-2011, 08:54 PM
It was always try except finally.
You will try the first thing except if it's not working than comes the except.
Finally you will do that no matter what.
It may be done in a different order(idk), but it will surely hurt sense of logic imho.

Floor66
03-20-2011, 09:01 PM
Using try...except...finally I get:
Error: Null Pointer Exception at line 90