2015-09-19 6 views
1

я увидел следующее из MSDN:WinHttp: может ли он использоваться параллельно?

WinHTTP не может использоваться повторно за исключением асинхронного завершения обратного вызова. То есть, в то время как поток имеет вызов ожидающий к одному из функций WinHttp, таких как WinHttpSendRequest, WinHttpReceiveResponse, WinHttpQueryDataAvailable, WinHttpSendData или WinHttpWriteData, он никогда не должны вызывать WinHTTP второй раз, пока первый вызов не имеет завершена.

Один из сценариев, при которых может произойти второй вызов, как следующим образом: Если приложение очередь асинхронного вызова процедур (APC) к потоку, который вызывает в WinHTTP, и если WinHTTP выполняет извещающие ждать внутри, БТР могу бегать. Если процедура APC имеет значение также для вызова WinHTTP, она повторно запускает API WinHTTP, а внутреннее состояние WinHTTP может быть повреждено.

Означает ли это, что нить вызывает WinHTTP, «сам поток» больше не может звонить в WinHTTP?

Или это означает, что нить вызывает WinHTTP, ни один другой WinHTTP не может быть вызван в вашей программе (даже если они находятся в других потоках.)?

И может ли кто-нибудь объяснить пример моего MSDN? Если он находится в режиме синхронизации, большинство функций WinHTTP блокируются? Как можно запустить APC?

+0

Я написал коды и нашел, что даже если он работает в многопоточном корпусе. Это кажется прекрасным, но для проблем, связанных с потоками, из этого трудно сделать какие-либо выводы. – Nyaruko

ответ

2

Означает ли это, что нить вызывает WinHTTP, «сам поток» больше не может звонить в WinHTTP?

Да. Различные потоки разрешены для одновременного вызова WinHTTP.

+0

Итак, на этот похожий вопрос: http: //stackoverflow.com/questions/32669042/winhttp-multithreading-reentrant-issue, ответ также да? – Nyaruko

+1

Это тот же вопрос. Ответ один и тот же. –