Visual C ++ поток с мьютексом не блокирует - PullRequest
1 голос
/ 25 мая 2011

Я занимаюсь разработкой с VC2005, и у меня возникла проблема с потоком.

У меня есть поток, который удаляет данные из очереди и отправляет их. Но эта ветка отправляет одну петицию и должна ждать ответа, чтобы отправить новую петицию (я хочу установить тайм-аут, чтобы предотвратить бесконечный тайм-аут).

У меня есть такая тема:

while (true){
    dequeue()
    send()
    WaitForSingleObject(ptClass->getMutex(),10000);
}

Но этот WaitForSingleObject никогда не останавливается ... У меня есть событие init, подобное этому:

    HANDLE ghMutex = CreateEvent(NULL,FALSE, FALSE, "");

Идея состоит в том, чтобы заблокировать поток, чтобы прекратить отправку данных, и когда ответ придет, разблокировать этот поток, чтобы отправить новую петицию ... Почему никогда не останавливается ???

С уважением

1 Ответ

1 голос
/ 25 мая 2011

Этот поток, который у вас есть, ждет, пока событие не будет установлено, чтобы сигнализировать о нем, чтобы его можно было снова разбудить. Вы должны установить событие для сигнализации, используя SetEvent . Не знаю, где ты это сделаешь, поскольку я не знаю твоей архитектуры, но вот чего не хватает.

WaitForSingleObject выводит ваш поток из контекста процессора, но он больше не просыпается.

Ваш тайм-аут вашего Ожидания должен быть установлен на БЕСКОНЕЧНЫЙ, если вы хотите, чтобы оно ожидало, пока событие не было установлено как сигнальное, и вы не можете гарантировать, что оно произойдет немедленно.

Вы не используете мьютекс, вы используете AutoResetEvent, но вы должны установить его!

...