Форум: "WinAPI";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Внизсоздание потока Найти похожие ветки
← →
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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.037 c