Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
ВнизСоздать поток в DLL Найти похожие ветки
← →
Sicwell (2004-12-13 08:41) [0]Имеется 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;
← →
vidiv © (2004-12-13 08:50) [1]а Диспетчер задач что пишет? есть поток?
← →
Sicwell (2004-12-13 08:56) [2]ProcessXP поток с таким ThreadID видит - так что поток есть.
← →
Leonid Troyanovsky © (2004-12-13 11:34) [3]
> 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.
← →
DiamondShark © (2004-12-13 11:53) [4]Поток не начнёт исполняться (хотя и создастся), пока не завершится DllEntryPoint.
Поэтому Wait* приведёт к дэдлоку.
А вообще, по логике написанного кода, никакой поток там нафиг не нужен.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.12.26;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.037 c