Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

создание потока [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]

ты описание параметров ф-ции читал в справке ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо