Научился создавать класс потока, екзекутить его. Но у меня появляется нескромный вопрос - есть функция, принимающая какие-либо параметры. Мне нужно запустить n потоков, в которых будут работать n функций. Вроде бы все просто, но я не могу понять, как запустить эти потоки, чтобы в каждом была функция с разными параметрами. Поможет кто? Большое спасибо.
Ах да - работаю таким образом. potok = class(TThread) // Обьявление класса. private { Private declarations } protected procedure Execute; override; end; var Thread1: Tpotok; // Переменная нашего типа. procedure Tpotok.Execute; // Собственно сам поток. begin while True do begin work(Параметр,true); sleep(3000); end; end;
Code: uses SyncObjs; potok = class(TThread) private s : string;///////////это переменные которые можно ss : string;///////////использовать при передачи данных rez : Integer;///////внутри потока protected procedure Execute; override; public procedure Sync; //////////это процедуры которые /////////////////ты можешь вызывать из потока constructor Create(CreateSuspended: Boolean);///это ///////конструктор ты здесь лучше ничего пока не меняй. end; var CS:TcriticalSection;///на всякий случай объявляем критические ///секции constructor potok.Create(CreateSuspended: Boolean); begin inherited Create(CreateSuspended);///непосредственно end;///////процедура конструктора implementation procedure TForm1.Button2Click(Sender: TObject); begin for potok:=1 to 5 do ///здесь непосредственно создаём потоки potok.Create(false);///сколько тебе нужно end; procedure potok.Execute;//процедура выполняемая после создания потока var begin end; procedure potok.Sync; ///дополнительная процедура потока begin//которую ты можеш вызывать из потока, например, end;///для работы с графическими элементами end;////в главном потоке. //не стоит забывать о том, что работа с графическими //элементами и объектами в главном потоке, осуществляется //только через synchronize. пример: synchronize(Sync); procedure TForm1.FormCreate(Sender: TObject); begin CS:=TcriticalSection.create;///создание критических секций end; procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); begin CS.Free;//всё, что создали ручками не забываем удалить end; end. Ну как - то так. вроде расписал. Если что пиши в асю, помогу.