![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Создать поток в DLL [Win95/98, Win2k, WinXP]
Sicwell © (2004-12-13 08:41:00)Имеется DLL - необходимо при загрузке приложения, к которому она подключена создать поток, запустить его и дождаться его завершения, но проблема в том, что поток не начинает исполняться ! Не могу понять в чем проблема. Вот прототип кода:
procedure DLLEntryPoint(dwReason: DWORD);
begin
case dwReason of
DLL_PROCESS_ATTACH:
begin
HThread := CreateThread(nil, 0, @ThreadStart, nil, 0, ThreadID);
WaitForSingleObject(HThread);
end;
...
end;
DiamondShark (2004-12-13 11:53:00) [1]Поток не начнёт исполняться (хотя и создастся), пока не завершится DllEntryPoint.
Поэтому Wait* приведёт к дэдлоку.
А вообще, по логике написанного кода, никакой поток там нафиг не нужен.
Leonid Troyanovsky (2004-12-13 11:34:00) [2]
> Sicwell (13.12.04 08:41)
> Имеется DLL - необходимо при загрузке приложения, к которому
> она подключена создать поток, запустить его и дождаться
> его завершения, но проблема в том, что поток не начинает
> исполняться ! Не могу понять в чем проблема. Вот прототип
> кода:
>
> procedure DLLEntryPoint(dwReason: DWORD);
> HThread := CreateThread(nil, 0, @ThreadStart, nil,
> 0, ThreadID);
> WaitForSingleObject(HThread);
> end;
В EntryPoint не должно быть функций ожидания (как, IMHO, и CreateThread).
При вызове функции загружающий длл поток входит в критическую секцию,
которую освобождает лишь при выходе.
Подробности ищи в msdn.
--
С уважением, LVT.
Sicwell (2004-12-13 08:56:00) [3]ProcessXP поток с таким ThreadID видит - так что поток есть.
vidiv (2004-12-13 08:50:00) [4]а Диспетчер задач что пишет? есть поток?