|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Передача параметров потоку
Имеется код
Код:
procedure wrk(param1, param2, param3:string; param4, param5: integer; out rslt:string); begin rslt:=param1+param2+param3+inttostr(param4+param5); end; procedure TForm1.Button1Click(Sender: TObject); var mvs:string begin wrk('1', '2', '3', 4, 5, mvs); showmessage(mvs) end; Появилась такая проблема, процедуру wrk необходимо выполнить в отдельном потоке, каким образом передать ей параметры? Пробовалось и CreateThread и TThread, но как передать процедуре параметры так и не понял. В сети полно примеров, но во всех примерах вызов процедуры проходит без параметров... |
#2
|
||||
|
||||
|
#3
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TMyThread = class(TThread) private param1: String; param2: String; param3: String; param4: Integer; param5: Integer; rslt: String; protected procedure Execute; override; public constructor Create(aparam1: String; aparam2: String; aparam3: String; aparam4: Integer; aparam5: Integer); // destructor Destroy; override; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } MyThread: TMyThread; procedure OnThread(Sender: TObject); end; var Form1: TForm1; implementation {$R *.dfm} { TMyThread } constructor TMyThread.Create(aparam1: String; aparam2: String; aparam3: String; aparam4: Integer; aparam5: Integer); begin inherited Create(False); FreeOnTerminate:=False; param1:=aparam1; param2:=aparam2; param3:=aparam3; param4:=aparam4; param5:=aparam5; end; //destructor TMyThread.Destroy; //begin // windows.Beep(1000, 100); // inherited Destroy; //end; procedure TMyThread.Execute; begin Sleep(5000); rslt:=param1+param2+param3+IntToStr(param4+param5); end; { TForm1 } procedure TForm1.FormCreate(Sender: TObject); begin MyThread:=TMyThread.Create('a', 'b', 'c', 1, 2); MyThread.OnTerminate:=OnThread; end; procedure TForm1.OnThread(Sender: TObject); begin Caption:=MyThread.rslt; MyThread.Free; end; end. |