Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

создание потока   Найти похожие ветки 

 
terra0 ©   (2004-09-02 02:48) [0]

Если кто-то знает - помогите. В программе есть функция - ее выполнение занимает достаточно времени и в основном теле программы вызввает подвисание формы. Хотелось бы запускать данную функцию в отдельном потоке при этом не сильно меняя исходный код (программа достаточно сложная и написана мной давно). Попытался создать такую конструкцию
ThreadRead:=CreateThread(nil,0,@ReadData(StrToInt("$"+EditFAdr.Text),StrToInt("$"+EditLAdr.Text)),nil,0,ThrId);
и что-то не идет - требуется указание параметра.
Функция - глобальная.
Большая просьба - помогите!


 
Digitman ©   (2004-09-02 08:14) [1]

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


 
Дмитрий Ботвин   (2004-09-02 08:37) [2]

А чё добавить отдельный модуль, описывающий поток не судьба????
В нём в процедуре 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.


 
Дмитрий Ботвин   (2004-09-02 08:44) [3]

Вот твоя строка в измененном виде:
ThreadRead:=CreateThread(nil,0,@ReadData(StrToInt("$"+EditFAdr.Text),StrToInt("$"+EditLAdr.Text)),<self>,0,ThrId);


 
Дмитрий Ботвин   (2004-09-02 08:45) [4]

<self> - это я хотел написать self жирным :-))))


 
Digitman ©   (2004-09-02 08:47) [5]


> вот неплохой примерчик


примерчик-то, может, и хорош всем ... за исключением одного "плохого"

TForm1(p).caption := "Hello from thread"; //делать так недопустимо !

кр.того, вызов ExitThread() вовсе необязателен


 
Дмитрий Ботвин   (2004-09-02 08:58) [6]

Согласен, не посмотрел!!! Я его походу ответа из демки взял для
примера использования функции createthread :-))))


 
Дмитрий Ботвин   (2004-09-02 09:12) [7]

Кстати, Digitman, если уж заговорили о потоках, ты часом не
знаешь как сделать так, чтобы два потока выполнялись параллельно
каждый на своём процессоре. Потоки я создаю с  использованием
класса TThread и тачка у меня двухпроцессорная. Помоги если
знаешь как.....


 
Digitman ©   (2004-09-02 09:30) [8]

см. SetThreadAffinityMask, SetThreadIdealProcessor


 
Дмитрий Ботвин   (2004-09-02 09:32) [9]

Спасибо, посмотрю!!!!


 
KSergey ©   (2004-09-02 15:15) [10]

В принципе Digitman ответил, но докучи:
http://softs.h10.ru/literature.shtml?topic=visual&book=1&page=head7.htm



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.036 c
4-1094715591
cheburator
2004-09-09 11:39
2004.10.10
Компоненты для работы с графикой из под WIN API ????


4-1094562789
VZup
2004-09-07 17:13
2004.10.10
Как рисовать на панели


8-1090012783
кактусбел
2004-07-17 01:19
2004.10.10
Как загрузить в Тimage фаилы в форматах tif, png, gif


1-1095828547
_sulent
2004-09-22 08:49
2004.10.10
&amp;#1064;&amp;#1088;&amp;#1080;&amp;#1092;&amp;#1090;


4-1094813599
Чебуратор
2004-09-10 14:53
2004.10.10
Быстро передать файл клиенту через сервер приложений (MIDAS)?