Hi all, I need to unlock my program when I run a function (it simply loads a file and elaborates some data, I would do something of beauty like a progress bar). I read the wiki, but it seems to be too much for my purpose and the function I need to run is already inside a class (I wouldn't touch it).
On delphibasics I read about BeginThread ( http://www.delphibasics.co.uk/RTL.asp?Name=BeginThread ) and I'm trying to implement it on a trivial test project (it just insert in two TMemo the "i" of a loop), e.g.: (********************************************) ... function count(n: integer; memo: Tmemo):Integer; var i: integer; begin memo.Clear; for i:= 0 to n do begin memo.Append(IntToStr(i)); end; end; procedure TForm1.Button1Click(Sender: TObject); begin count(1000,memo1); end; procedure TForm1.Button2Click(Sender: TObject); begin count(1000,memo2); end; ... (********************************************) The goal is to run "count" in a thread and BeginThread seems to be ok for this, but I have some problems with delphibasics code: (********************************************) ... function ShowMsg(Parameter : Pointer) : Integer; begin // Set up a 0 return value Result := 0; // Map the pointer to the passed data // Note that each thread has a separate copy of msgPtr msgPtr := Parameter; // Display this message //ShowMessagePos('Thread '+IntToStr(msgPtr.thread)+' '+msgPtr.msg, //original // 200*msgPtr.thread, 100); //original ShowMessagePos('Thread '+IntToStr(msgPtr^.thread)+' '+msgPtr^.msg, 200*msgPtr^.thread, 100); // End the thread EndThread(0); end; procedure TForm1.FormCreate(Sender: TObject); var id1, id2 : LongWord; thread1, thread2 : Integer; msg1, msg2 : TMsgRecord; begin // set up our display messages msg1.thread := 1; msg1.msg := 'Hello World'; msg2.thread := 2; msg2.msg := 'Goodbye World'; // Start the first thread running asking for users first name thread1 := BeginThread(nil, 0, Addr(ShowMsg), //I get error here(*) Addr(msg1), 0, id1); // And also ask for the surname thread2 := BeginThread(nil, 0, Addr(ShowMsg), //I get error here(*) Addr(msg2), 0, id2); // Ensure that the threads are only closed when all done ShowMessagePos('Press this when other dialogs finished.', 200, 300); // Finally, tidy up by closing the threads CloseHandle(thread1); CloseHandle(thread2); end; ... (********************************************) (*)I get error here: main.pas(122,31) Error: Wrong number of parameters specified for call to "ShowMsg" How to fix? There is a better/easier way? Thank you, Kjow -- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
