|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Передача параметров потоку
Тут сообщение разместить не дали, дескать слишком старая тема. Но вопрос похожий, только нужно функцию вставить в поток, передать ей параметры, произвести вычисления и вернуть результат. Код, представленный NumLock-ком при компиляции сильно тормозит, свою работу правда делает, но по завершении программа напрочь зависает. Поэтому разобрать его толком не мог.
Какие еще есть варианты передачи параметров потоку? Или оптимизировать прежний пример... |
#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, aparam2, aparam3: String; aparam4, aparam5: Integer); destructor Destroy; override; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } MyThread: TMyThread; procedure OnThread(Sender: TObject); public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} { TMyThread } constructor TMyThread.Create(aparam1, aparam2, aparam3: String; aparam4, aparam5: Integer); begin inherited Create(True); FreeOnTerminate:=True; param1:=aparam1; param2:=aparam2; param3:=aparam3; param4:=aparam4; param5:=aparam5; Resume; end; destructor TMyThread.Destroy; begin windows.Beep(1000, 100); inherited Destroy; end; procedure TMyThread.Execute; begin Sleep(1000); 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; end; end. Пишу программы за еду. __________________ |
Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Speech (26.03.2013)
|