Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
кажется знаю причину 13.07.01 20:20 Число просмотров: 694
Автор: kabanchik Статус: Незарегистрированный пользователь
|
> DWORD CALLBACK AllowPingHolderThread(void *dummy) > { > Sleep(df.PingDelay); > SetEvent(AllowPingEvent); > > return(0); > } > > и следующий не начнется без AllowPingEvent, а он тормозит > мля :((( > из твоего сказанного выходит, что пока не сработает SetEvent(AllowPingEvent); поток не создастся.
теперь следи что у тебя получается :
1) Зашел в AllowPingHolderThreadж
2) передал управление другому потоку; тот что то сделал, или ничего не сделал если нет потока, это не важно, главное тут твой поток немного тормознул уже.
3) поставил Event в состояние Signaled.
4) вышел из ф-ии и продолжил работу, так и не передав сразу же управление другому потоку - ждущему или вновь создающемуся, т.е. у тебя торомозит дважды (1-ый раз в п.2)
попробуй так, думаю тебя удовлетворит (просто поменяй местами строки)
DWORD CALLBACK AllowPingHolderThread(void *dummy)
{
SetEvent(AllowPingEvent); // <<==
Sleep(df.PingDelay); // <<==
return(0);
}
т.е. поставил Event в состояние Signaled, сразу передал управление ждущему потоку, и спокойно ушел - тут торможение уже не важно, даже не заметно, во всяком случае так должно быть :)
А то что касается про Вин9Х - у кастрированных систем все как у кастрата :))) у него менеджер не полноценный, вот и кажется, что не тормозит.
Удачи.
|
|
|