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

Вниз

Не получается у меня с потоками...   Найти похожие ветки 

 
Геннадий ©   (2002-10-16 22:23) [0]

Уважаемые мастера!

Подкиньте примерчик, в котором создаётся поток, выполняющий что-либо параллельно приложению.
У меня поток забирает под себя всё процессорное время, отведённое программе. В нём есть большой цикл. Я хотел убедиться, что потоки выполняются (почти) независимо от приложения и нисколько ему не мешают. А получается так, что пока поток не завершится, приложение быдет страшно тормозить.
Подкиньте примерчик, где всё работает на ура. Желательно маленький, что бы в лишнем коде не разбираться.
Спасибо.


 
Rouse_ ©   (2002-10-16 22:28) [1]

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

type
TTest = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{ Test }

procedure TTest.Execute;
begin
inherited;
{Что нибудь делаем}
end;

procedure TForm1.FormCreate(Sender: TObject);
var tmp: TTest;
begin
tmp := TTest.Create(true);
tmp.Priority := tbIDLE;
tmp.Resume;
end;

end.


Желаю успехов


 
Delphist   (2002-10-16 23:11) [2]

Удалено модератором


 
pirat ©   (2002-10-16 23:19) [3]

Удалено модератором


 
pirat ©   (2002-10-16 23:47) [4]


hThread:THandle;

procedure TForm.Create;
var pID:integer;
info:integer; // Что угодно в том числе и указетель или структура
begin

hthread :=CreateThread(nil,0,@ThreadProc,@Info,0,pID);
// Создаем тред и запускаем

end;

procedure ThreadProc(info:pointer);
begin
// через инфо получаем данные,в принципе,если такой тред будет один,то их можно передать и через глобальные переменные
// Делаем что угодно, все формы , если обявить эту процедуру глобально,будут видны
CloseHandle(hThread);// обнуляем хэндл
end;


 
Новенький в Делфи   (2002-10-16 23:56) [5]

Так... ещё один пример.
Создаём новый модуль file>new>Other> TThread
В открывшемся окошке пишшите имя дл ясвоего типа.. к примеру MyThread
Там уже будет половина за Вас сделано.

Дальше в созданную процедуру MyTread.Execute;
вписываете что вам надо.

Создаёте переменную к пример t: TMyTread;
Дальше для испольнения потока
T:= TMyTread.create(false);//Именно False

Незабудьте подключить новый модуль к проекту
..это на вскидку...

Да и не плохо бы было код привести, где у вас не получается


 
pirat ©   (2002-10-17 00:02) [6]

Удалено модератором


 
Rouse_ ©   (2002-10-17 07:46) [7]

Я вчера допустил раковую ошибочку ;)
Заместо tbIDLE пишется конечно же tpIdle.
2 Геннадий тебе выслал пример мылом, так как в Асе ты уже отключился (с шестой попытки правда мыло ушло)


Желаю успехов


 
Геннадий ©   (2002-10-17 19:16) [8]




М-да... Прикалываеться все горазды... Нет бы помочь...



==> Rouse_ (архив не прошёл)


 
Ketmar ©   (2002-10-17 20:52) [9]

2pirat:
лучше использовать не CreateThread, а BeginThread. почему - смотрите в справке Дельфи.

Satanas Nobiscum! 17-Oct-XXXVII A.S.


 
pirat ©   (2002-10-18 10:06) [10]

2Ketmar
Ну только если надо обрабатывать исключения.



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

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

Наверх




Память: 0.49 MB
Время: 0.018 c
14-92726
Игорь Шевченко
2002-10-08 10:10
2002.10.28
Alx2, с днем рождения!


3-92370
Avsam
2002-10-04 18:48
2002.10.28
TBitmap в/из Blob


3-92347
Sergant
2002-10-06 05:00
2002.10.28
Не могу создать/добавить индекс в Firebird!!!


14-92695
raiv
2002-10-08 09:56
2002.10.28
Уважаемые знатоки Delphi, у меня к Вам вот такой вопрос.


1-92590
antonioxxx
2002-10-15 20:05
2002.10.28
Packages в Delphi