Собсно ламерский вопросец - можно ли, и как организовать многопоточность в консольном приложении? в чем у меня лажа?...: делаю так: 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. Фсе гламурно пашет... В чем грабли?
Thread = class(TThread) procedure Execute; override; end; когда создаешь класс, необходимо "создавать" класс... В пример тот же TStrings/TStringList/...
DWORD WINAPI threadfunc() { printf("lol"); Sleep(1000); return 0; } void main() { HANDLE hthread; hthread = CreateThread(...); WaitForSingleObject(hthread, INFINITE); } можт результата не видишь потому что главный поток соскакивает до того как второй закончит исполнение. для этого WaitFor...
Ту сноу! вместо слип(1000) тоже можно использовать ВаитФоСинглОбжект с нулевым событием и задержкой на 1000. Это вроде меньше ресурсов жрет.
Вот этот код стопроцентно работает PHP: program Project1;{$APPTYPE CONSOLE}uses Classes,StdCtrls;type Thread = class(TThread) procedure Execute; override; end;procedure Thread.Execute;begin writeln('lol');end;begin Thread.Create(false);end. Скриншот прилагается - возможно ты не правильно компилируешь,попробуй cntrl+F9 ( компиляция без запуска ) %)
2гема нахрена для этого еще класс этот дурацкий использовать? у снега все понятнее, проще и более того правильнее)