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