![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не получается у меня с потоками... [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.
Желаю успехов