![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
создание потока [D7, WinXP]
terra0 © (2004-09-02 02:48:00)Если кто-то знает - помогите. В программе есть функция - ее выполнение занимает достаточно времени и в основном теле программы вызввает подвисание формы. Хотелось бы запускать данную функцию в отдельном потоке при этом не сильно меняя исходный код (программа достаточно сложная и написана мной давно). Попытался создать такую конструкцию
ThreadRead:=CreateThread(nil,0,@ ReadData(StrToInt('$'+EditFAdr.Text),StrToInt('$'+EditLAdr.Text)),nil,0,ThrId);
и что-то не идет - требуется указание параметра.
Функция - глобальная.
Большая просьба - помогите!
KSergey (2004-09-02 15:15:00) [1]В принципе Digitman ответил, но докучи:
http://softs.h10.ru/literature.shtml?topic=visual&book=1&page=head7.htm
Дмитрий Ботвин (2004-09-02 09:32:00) [2]Спасибо, посмотрю!!!!
Digitman (2004-09-02 09:30:00) [3]см. SetThreadAffinityMask, SetThreadIdealProcessor
Дмитрий Ботвин (2004-09-02 09:12:00) [4]Кстати, Digitman, если уж заговорили о потоках, ты часом не
знаешь как сделать так, чтобы два потока выполнялись параллельно
каждый на своём процессоре. Потоки я создаю с использованием
класса TThread и тачка у меня двухпроцессорная. Помоги если
знаешь как.....
Дмитрий Ботвин (2004-09-02 08:58:00) [5]Согласен, не посмотрел!!! Я его походу ответа из демки взял для
примера использования функции createthread :-))))
Digitman (2004-09-02 08:47:00) [6]
> вот неплохой примерчик
примерчик-то, может, и хорош всем ... за исключением одного "плохого"
TForm1(p).caption := 'Hello from thread'; //делать так недопустимо !
кр.того, вызов ExitThread() вовсе необязателен
Дмитрий Ботвин (2004-09-02 08:45:00) [7]<self> - это я хотел написать self жирным :-))))
Дмитрий Ботвин (2004-09-02 08:44:00) [8]Вот твоя строка в измененном виде:
ThreadRead:=CreateThread(nil,0,@ReadData(StrToInt('$'+EditFAdr.Text),StrToInt('$'+EditLAdr.Text)),<self>,0,ThrId);
Дмитрий Ботвин (2004-09-02 08:37:00) [9]А чё добавить отдельный модуль, описывающий поток не судьба????
В нём в процедуре Execute и вставляй свою функцию.
Если нужно используй Synchronize....
Можно и без использования класса TThread, вот неплохой примерчик
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls,
Forms, Dialogs, StdCtrls;
procedure printh(p: pointer); stdcall;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure printh(p: pointer);
begin
TForm1(p).caption := 'Hello from thread';
ExitThread(0);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
h1: cardinal;
begin
createthread(nil, 128, @printh, self, 0, h1);
end;
end.
Digitman (2004-09-02 08:14:00) [10]ты описание параметров ф-ции читал в справке ?