Консультация № 87801
20.05.2007, 20:43
0.00 руб.
0 2 2
Здраствуйте
С помощью удаленных потоков внедрился в процесс. После того как в DllEntryPoint выполнятся все функкции поток благополучно завершается. В этом и проблема. Нужно чтобы он завершался вместе с главным потоком. Может быть у кого-нибудь есть мысли как заставить поток дожидаться определенного события и только потом завершаться?

Обсуждение

Неизвестный
20.05.2007, 20:51
общий
это ответ
Здравствуйте, Sov!
Просто можете создать в длл поток, который ожидает событие синхронизации.
и тогда с главного приложения можно подать сигнал сразу всем потокам...
Смотрите в сторону mutex.. createmutex
вот так ждем-сс сигнала
<code>
DWORD WINAPI name(LPVOID lpThreadParameter)
{
SECURITY_ATTRIBUTES sa = {0};
sa.nLength = sizeof(sa);
sa.bInheritHandle = FALSE;
BOOL bGotSA = FALSE;
SECURITY_DESCRIPTOR sd;
if(InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION))
{
if(SetSecurityDescriptorDacl(&sd, TRUE, (PACL)NULL, FALSE))
{
bGotSA = TRUE;
sa.lpSecurityDescriptor = &sd;
}
}
HANDLE hMutex;
int nErr;
if(bGotSA)
{
hMutex = CreateEvent(&sa, true, false, "name");
}
else
{
hMutex = CreateEvent(NULL, true, false, "name");
}

if(WaitForSingleObject(hMutex, INFINITE)==WAIT_OBJECT_0)
{
close this...;
}
if(hMutex)
{
CloseHandle(hMutex);
}
return 0;
}
</code>

а вот так даем сигнал, если не ошибаюсь
<code>
HANDLE hEv2 = CreateEvent(0, true, false, "name");
SetEvent(hEv2);
CloseHandle(hEv2);
</code>
Неизвестный
20.05.2007, 22:49
общий
это ответ
Здравствуйте, Sov!
/////////////////////////////
УСЫПИТЬ поток Sleep(INFINITE);
*****************************
:(:)
Удачи!
Форма ответа