Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Delphi [Console App + TThread] (https://forum.antichat.xyz/showthread.php?t=25631)

qPhoenix 19.10.2006 19:33

Delphi [Console App + TThread]
 
Собсно ламерский вопросец - можно ли, и как организовать многопоточность в консольном приложении?

в чем у меня лажа?...:

делаю так:
Код:

program Project1;

{$APPTYPE CONSOLE}

uses Classes;

type
 Thread = class(TThread)
  procedure Execute; override;
 end;

procedure Thread.Execute;
begin
 writeln('lol');
end;

begin
 Thread.Create(false);
end.

Непашет... :(
Затем ради интереса проделываю аналогичное с использованием формы:
Код:

unit Unit1;

interface

uses Forms, StdCtrls, Classes, Controls;

type
 TForm1 = class(TForm)
  Label1: TLabel;
  procedure FormCreate(Sender: TObject);
 end;

 Thread = class(TThread)
  procedure Execute; override;
 end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure Thread.Execute;
begin
 Form1.Label1.Caption:='lol';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 Thread.Create(false);
end;

end.

Фсе гламурно пашет...

В чем грабли? :(

qPhoenix 19.10.2006 19:48

Не катит... :(

qPhoenix 19.10.2006 19:57

Аналогично... :rolleyes:

W!z@rD 19.10.2006 22:05

Thread = class(TThread)
procedure Execute; override;
end;

когда создаешь класс, необходимо "создавать" класс... В пример тот же TStrings/TStringList/...

sn0w 25.10.2006 16:50

DWORD WINAPI threadfunc()
{
printf("lol");
Sleep(1000);
return 0;
}

void main()
{
HANDLE hthread;
hthread = CreateThread(...);

WaitForSingleObject(hthread, INFINITE);
}

можт результата не видишь потому что главный поток соскакивает до того как второй закончит исполнение. для этого WaitFor...

da_ff 27.10.2006 22:22

Ту сноу! вместо слип(1000) тоже можно использовать ВаитФоСинглОбжект с нулевым событием и задержкой на 1000. Это вроде меньше ресурсов жрет.

ZaCo 27.10.2006 22:30

2da_ff эээ какие там еще ресурсы сжираются?

blackybr 27.10.2006 22:48

да.. WaitSingleObject() следит за всеми трэдами.. и никакой слип не нужен )

gemaglabin 27.10.2006 22:55

Вот этот код стопроцентно работает

PHP код:

program Project1;

{
$APPTYPE CONSOLE}

uses
  Classes
,StdCtrls;

type
 Thread 
= class(TThread)
  
procedure Executeoverride;
 
end;

procedure Thread.Execute;
begin
 writeln
('lol');
end;

begin
 Thread
.Create(false);
end

Скриншот прилагается - возможно ты не правильно компилируешь,попробуй cntrl+F9 ( компиляция без запуска ) %)

http://img112.imageshack.us/img112/4570/console1yv6.png

ZaCo 27.10.2006 23:22

2гема нахрена для этого еще класс этот дурацкий использовать? у снега все понятнее, проще и более того правильнее)

sn0w 30.10.2006 15:51

2da_ff: прочти этот fucking manual, и осмысли предназначение Sleep() и WaitForSingleObject()


Время: 03:34