Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
[Win32] тогда еще вопрос 13.07.01 18:48 Число просмотров: 789
Автор: lissovsky Статус: Незарегистрированный пользователь Отредактировано 13.07.01 19:32 Количество правок: 1
|
> > Уходят сами. > > в двух потоках сидят циклы > > while(...) { ...; WaitForMultipleObjects(...); ...; > > CloseHandle(...); ...; CreateThread(...); ... } > > > > > используешь ли объекты ядра для синхронизации? > > > > Семафор и несколько событий > > > как порождаются и завершаются потоки? > > я, например, порождаю потоки с помощью _beginthreadex(...), > завершаю путем вызова из функции потока _endthreadex(0); > при этом использую event для информирования дочернего > потока о том, что ему пора завершить работу. > все работает OK и процессор загружен нормально.
У меня CreateThread(...) и обычный выход из функции потока return.
_beginthreadex(...) нужен для стандартных библиотек, я их не использую.
Процессор у меня не перегружается в любом случае, тормозят только мои потоки, поскольку пока не пропингует, сканить не будет, а пингует у меня не как из пушки, а через заданные интервалы т.е. каждый пингующий поток вызывает вот это:
DWORD CALLBACK AllowPingHolderThread(void *dummy)
{
Sleep(df.PingDelay);
SetEvent(AllowPingEvent);
return(0);
}
и следующий не начнется без AllowPingEvent, а он тормозит мля :(((
> > кстати - зачем в данном потоке ты используешь Sleep(0)? > (в теории я знаю, что это приводит к передаче управления > другому потоку, но ни разу не возникало у меня > необходимости в таком "читерстве")
Sleep(0) - это просто ляп, но таких последствий из-за него быть не должно.
Я не очень представляю себе как можно выловить настоящую причину такого безобразия.
|
|
|