реклама на сайте
подробности

 
 
> WinAPI - Event`ы работают не корректно
megajohn
сообщение Feb 10 2014, 14:14
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 080
Регистрация: 16-11-04
Из: СПб
Пользователь №: 1 143



нужно организовать алгоритм:
три задачи t1a t1b t2 ( в WinApi это Thread но сути не меняет )
нужно чтобы t1a и t1b выполнили некое действие, выставили готовность чтобы уйти в ожидание и дать управление задаче t2, задача t2 выполняет свое действие, приостанавливает свою работу и разрешает работу t1a и t1b
и снова по кругу

написал следующее (псевдокод):
Код
HANDLE events_t1_rdy[2] = { 0 };
HANDLE events_t2_rdy  = { 0 };

events_t1_rdy[0] = CreateEvent( NULL, FALSE, FALSE, NULL ); // с автосбросом
events_t1_rdy[1] = CreateEvent( NULL, FALSE, FALSE, NULL ); // с автосбросом
events_t2_rdy    = CreateEvent( NULL, TRUE,  FALSE, NULL ); // с ручным сбросом

t1a()
{
    t1a_todo();
    SetEvent( events_t1_rdy[0] );
    DWORD dwEvent = WaitForSingleObject( events_t2_rdy, 5000 );
    assert( dwEvent == WAIT_OBJECT_0 );
}

t1b()
{
    t1b_todo();
    SetEvent( events_t1_rdy[1] );
    DWORD dwEvent = WaitForSingleObject( events_t2_rdy, 5000 );
    assert( dwEvent == WAIT_OBJECT_0 );
}

t2()
{
    DWORD dwEvent = WaitForMultipleObjects( 2, events_t1_rdy, TRUE, 5000 );
    assert( dwEvent == WAIT_OBJECT_0 );
    t2_todo();
    PulseEvent( events_t2_rdy );
}


дык вот, один раз в 100тысяч - милллион раз, одна задача (t1a или t1b ) не получает что t2 готов и ловлю dwEvent = 258 = 0x102 = TIMEOUT

как лечится ?


--------------------
Марс - единственная планета, полностью населенная роботами (около 7 штук).
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 20:44
Рейтинг@Mail.ru


Страница сгенерированна за 0.01462 секунд с 7
ELECTRONIX ©2004-2016