Процессы

Наследники OIT
Дата: 14.02.2003 15:44:12
Хочу создать приложение без формы так чтобы оно не прекращалось после выполнения основного модуля, а оставалось в фоне. Пробую создать дополниетльный поток и запустить в нем процедуру с пустым цикллом, но почему-то она не запускается. Вот кусок кода:
hThread := CreateThread (nil, 0, @NullThreadProc, nil, 0, ThreadId);
ResumeThread (hThread);

где:

Function NullThreadProc () : Longint; StdCall;
Begin
While True Do Sleep(2000);
End;

Кто-нибудь знает как вообще можно решить такую проблему???
Заранее благодарен (quasar@front.ru)
alex_k
Дата: 14.02.2003 16:50:44
вообще я всегда думал что в функцию Function NullThreadProc () : Longint; StdCall;
нужно передавать параметр типа поинтер (4 байта в смысле).
Во вторых трид это дщерь процесса, нет процесса нет трида. Значит нужно трид оставлять в памяти. Хотя окна можно поубивать, дело вкуса. Но вот что непонятно. ЗАЧЕМ ТРИД? сделай тотже пустой цикл в конце основного модуля да и все.
StarWind
Дата: 16.02.2003 10:59:16
попытаюсь перекомпилировать в код то что сказано в предыдущей мессаге :))
в основном потоке можно сделать что-то вроде
while true do
begin
// ваш код
...
Sleep(0); // отдадим операционке управление, так, на всякий случай
end
SiDen
Дата: 16.02.2003 13:38:08

var
Msg: TMsg;

function HandlerRoutine( dwCtrlType :Longint ) :Bool; stdcall;
begin
result := false;
case dwCtrlType of
CTRL_C_EVENT : обработка
CTRL_BREAK_EVENT : Ваших событий
CTRL_CLOSE_EVENT: тут
CTRL_LOGOFF_EVENT:
CTRL_SHUTDOWN_EVENT : begin result:=true;Halt(0);end;
end;
end;

begin

//Ваша программа

SetConsoleCtrlHandler(@HandlerRoutine,true);
// Цикл бесконечный
while GetMessage (Msg, 0, 0, 0) do
begin
TranslateMessage (Msg);
DispatchMessage (Msg);
end;
SetConsoleCtrlHandler(@HandlerRoutine,false);
end;