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

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

Не получается у меня с потоками... [D6, WinME]


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

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

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


pirat   (2002-10-18 10:06:00) [1]

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


Ketmar   (2002-10-17 20:52:00) [2]

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

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


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




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



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


Rouse_   (2002-10-17 07:46:00) [4]

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


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


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

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


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

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

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

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

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

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


pirat   (2002-10-16 23:47:00) [7]


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;


pirat   (2002-10-16 23:19:00) [8]

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


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

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


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

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.


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


Наверх

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