Delphi [Console App + TThread]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by qPhoenix, 19 Oct 2006.

  1. qPhoenix

    qPhoenix Banned

    Joined:
    15 Dec 2005
    Messages:
    87
    Likes Received:
    50
    Reputations:
    8
    Собсно ламерский вопросец - можно ли, и как организовать многопоточность в консольном приложении?

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

    делаю так:
    Code:
    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.
    Непашет... :(
    Затем ради интереса проделываю аналогичное с использованием формы:
    Code:
    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.
    Фсе гламурно пашет...

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

    qPhoenix Banned

    Joined:
    15 Dec 2005
    Messages:
    87
    Likes Received:
    50
    Reputations:
    8
    Не катит... :(
     
  3. qPhoenix

    qPhoenix Banned

    Joined:
    15 Dec 2005
    Messages:
    87
    Likes Received:
    50
    Reputations:
    8
    Аналогично... :rolleyes:
     
  4. W!z@rD

    W!z@rD Борец за русский язык

    Joined:
    12 Feb 2006
    Messages:
    973
    Likes Received:
    290
    Reputations:
    43
    Thread = class(TThread)
    procedure Execute; override;
    end;

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

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    DWORD WINAPI threadfunc()
    {
    printf("lol");
    Sleep(1000);
    return 0;
    }

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

    WaitForSingleObject(hthread, INFINITE);
    }

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

    da_ff Elder - Старейшина

    Joined:
    11 Jul 2006
    Messages:
    118
    Likes Received:
    22
    Reputations:
    26
    Ту сноу! вместо слип(1000) тоже можно использовать ВаитФоСинглОбжект с нулевым событием и задержкой на 1000. Это вроде меньше ресурсов жрет.
     
  7. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2da_ff эээ какие там еще ресурсы сжираются?
     
  8. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    да.. WaitSingleObject() следит за всеми трэдами.. и никакой слип не нужен )
     
  9. gemaglabin

    gemaglabin Green member

    Joined:
    1 Aug 2006
    Messages:
    772
    Likes Received:
    842
    Reputations:
    1,369
    Вот этот код стопроцентно работает

    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 ( компиляция без запуска ) %)

    [​IMG]
     
    1 person likes this.
  10. ZaCo

    ZaCo Banned

    Joined:
    20 Jun 2005
    Messages:
    737
    Likes Received:
    336
    Reputations:
    215
    2гема нахрена для этого еще класс этот дурацкий использовать? у снега все понятнее, проще и более того правильнее)
     
    1 person likes this.
  11. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    2da_ff: прочти этот fucking manual, и осмысли предназначение Sleep() и WaitForSingleObject()