Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.013 c
1-92506
Link
2002-10-08 13:49
2002.10.28
Изменение цвета линий в цикле


4-92814
МИФИст
2002-09-17 13:32
2002.10.28
Сообщения?


1-92460
Vitalik
2002-10-17 22:06
2002.10.28
создание визуальных компонентов


14-92707
Skier
2002-10-08 15:44
2002.10.28
Как через интернет отправить SMS сообщение на мобильник ?


6-92629
MVova
2002-08-27 15:46
2002.10.28
Где узнать какин порты какими програмами используються?




   Наверх