#c #multithreading #visual-studio-2005 #waitforsingleobject
#c #многопоточность #visual-studio-2005 #waitforsingleobject
Вопрос:
Я разрабатываю с VC2005, и у меня возникла проблема с потоком.
У меня есть поток, который извлекает данные из очереди и отправляет их. Но этот поток отправляет одно прошение и должен ждать ответа, чтобы отправить новое прошение (я хочу установить тайм-аут, чтобы предотвратить бесконечный тайм-аут).
У меня есть поток, подобный этому:
while (true){
dequeue()
send()
WaitForSingleObject(ptClass->getMutex(),10000);
}
Но этот WaitForSingleObject никогда не останавливается… Я инициализирую событие, подобное этому:
HANDLE ghMutex = CreateEvent(NULL,FALSE, FALSE, "");
Идея состоит в том, чтобы заблокировать поток, чтобы прекратить отправку данных, а когда придет ответ, разблокировать этот поток, чтобы отправить новое прошение… Почему никогда не останавливается???
с уважением
Комментарии:
1. Это не мьютекс. Это событие. Я думаю, вам нужно показать больше кода.
2. Вероятно, он останавливается, но только на 10 секунд. Затем он отправит следующий пакет, поскольку вы указали тайм-аут.
Ответ №1:
Этот имеющийся у вас поток ожидает, когда для события будет установлено значение signaled, чтобы его можно было снова запустить. Вы должны установить для события значение signaled с помощью SetEvent. Не уверен, где бы вы это сделали, поскольку я не знаю вашей архитектуры, но именно этого не хватает.
WaitForSingleObject выводит ваш поток из контекста процессора, но он больше не запускается.
Ваш тайм-аут ожидания должен быть установлен на БЕСКОНЕЧНЫЙ, если вы хотите, чтобы он ждал, пока событие не будет сигнализировано, и вы не можете гарантировать, что это произойдет немедленно.
Вы используете не мьютекс, вы используете AutoResetEvent, но вы должны его установить!
Комментарии:
1. он скорее спрашивает, почему он никогда не блокируется, вместо того, почему он блокируется на неопределенный срок, если я правильно понял.