WinHTTP - прерывание операции
От: DarkTranquillity  
Дата: 19.10.11 07:42
Оценка:
Здравствуйте, коллеги.
Можно ли в WinHTTP, используя его в синхронном режиме, досрочно прервать любую операцию, которая в это время "ожидает" ответа сервера?
Пример — WinHTTPReadData в отдельном треде ожидает ответа с сервера, а нам необходимо корректно завершить тред.
Спасибо.
Re: WinHTTP - прерывание операции
От: acDev Россия  
Дата: 19.10.11 08:37
Оценка:
Здравствуйте, DarkTranquillity, Вы писали:

DT>Пример — WinHTTPReadData в отдельном треде ожидает ответа с сервера, а нам необходимо корректно завершить тред.


А пробовал просто закрыть хэндл?
Re: WinHTTP - прерывание операции
От: boot  
Дата: 19.10.11 09:10
Оценка:
Здравствуйте, DarkTranquillity, Вы писали:

DT>Здравствуйте, коллеги.

DT>Можно ли в WinHTTP, используя его в синхронном режиме, досрочно прервать любую операцию, которая в это время "ожидает" ответа сервера?
DT>Пример — WinHTTPReadData в отдельном треде ожидает ответа с сервера, а нам необходимо корректно завершить тред.
DT>Спасибо.

shutdown || closesocket
Жизнеспособность прямо пропорциональна простоте!
Re[2]: WinHTTP - прерывание операции
От: DarkTranquillity  
Дата: 19.10.11 11:53
Оценка:
Здравствуйте, acDev, Вы писали:

D>Здравствуйте, DarkTranquillity, Вы писали:


DT>>Пример — WinHTTPReadData в отдельном треде ожидает ответа с сервера, а нам необходимо корректно завершить тред.


D>А пробовал просто закрыть хэндл?


Я думал об этом, но это же криво, и вообще UB, в МСДН написано четко:

The handles that are created and used by WinHTTP are called HINTERNET handles. The WinHTTP functions return HINTERNET handles that are not interchangeable with other handles, so they cannot be used with functions such as ReadFile or CloseHandle. Similarly, other handles cannot be used with WinHTTP functions. For example, a handle returned by CreateFile cannot be passed to WinHttpReadData. These HINTERNET handles cannot be closed while an API call using the handle is in progress. To avoid a race condition, applications should protect the handle and prevent it from being closed for as long as the API call is in progress.
Re[2]: WinHTTP - прерывание операции
От: DarkTranquillity  
Дата: 19.10.11 11:54
Оценка:
Здравствуйте, boot, Вы писали:

B>Здравствуйте, DarkTranquillity, Вы писали:


DT>>Здравствуйте, коллеги.

DT>>Можно ли в WinHTTP, используя его в синхронном режиме, досрочно прервать любую операцию, которая в это время "ожидает" ответа сервера?
DT>>Пример — WinHTTPReadData в отдельном треде ожидает ответа с сервера, а нам необходимо корректно завершить тред.
DT>>Спасибо.

B>shutdown || closesocket


И где же интересно мне достать хендл этого сокета?
Re[3]: WinHTTP - прерывание операции
От: boot  
Дата: 19.10.11 12:10
Оценка:
Здравствуйте, DarkTranquillity, Вы писали:

DT>Здравствуйте, boot, Вы писали:


B>>Здравствуйте, DarkTranquillity, Вы писали:


DT>>>Здравствуйте, коллеги.

DT>>>Можно ли в WinHTTP, используя его в синхронном режиме, досрочно прервать любую операцию, которая в это время "ожидает" ответа сервера?
DT>>>Пример — WinHTTPReadData в отдельном треде ожидает ответа с сервера, а нам необходимо корректно завершить тред.
DT>>>Спасибо.

B>>shutdown || closesocket


DT>И где же интересно мне достать хендл этого сокета?


На сокетах писать надо.
А так нужно ставить таймаут, чтобы вызвать ошибку ERROR_WINHTTP_TIMEOUT, тогда все будет корректно.
Жизнеспособность прямо пропорциональна простоте!
Re[4]: WinHTTP - прерывание операции
От: DarkTranquillity  
Дата: 19.10.11 12:16
Оценка:
Здравствуйте, boot, Вы писали:

B>Здравствуйте, DarkTranquillity, Вы писали:


DT>>Здравствуйте, boot, Вы писали:


B>>>Здравствуйте, DarkTranquillity, Вы писали:


DT>>>>Здравствуйте, коллеги.

DT>>>>Можно ли в WinHTTP, используя его в синхронном режиме, досрочно прервать любую операцию, которая в это время "ожидает" ответа сервера?
DT>>>>Пример — WinHTTPReadData в отдельном треде ожидает ответа с сервера, а нам необходимо корректно завершить тред.
DT>>>>Спасибо.

B>>>shutdown || closesocket


DT>>И где же интересно мне достать хендл этого сокета?


B>На сокетах писать надо.

Да, и непременно в машинных кодах

B>А так нужно ставить таймаут, чтобы вызвать ошибку ERROR_WINHTTP_TIMEOUT, тогда все будет корректно.

Неужели ставить таймаут в 100 мс, и все это обрабатывать?? Криво по-моему.
Вот пример — получение real-time звука. Сервер отдает кусочки по полсекунды через полсекунды, все это непрерывно в одном запросе, до разрыва соединения.
То есть WinHTTPReadData может ждать полсекунды следующую порцию. И за это время 3 раза выпасть в таймаут-error??
Re[5]: WinHTTP - прерывание операции
От: boot  
Дата: 19.10.11 12:24
Оценка: +1
Здравствуйте, DarkTranquillity, Вы писали:

DT>Здравствуйте, boot, Вы писали:


B>>Здравствуйте, DarkTranquillity, Вы писали:


DT>>>Здравствуйте, boot, Вы писали:


B>>>>Здравствуйте, DarkTranquillity, Вы писали:


DT>>>>>Здравствуйте, коллеги.

DT>>>>>Можно ли в WinHTTP, используя его в синхронном режиме, досрочно прервать любую операцию, которая в это время "ожидает" ответа сервера?
DT>>>>>Пример — WinHTTPReadData в отдельном треде ожидает ответа с сервера, а нам необходимо корректно завершить тред.
DT>>>>>Спасибо.

B>>>>shutdown || closesocket


DT>>>И где же интересно мне достать хендл этого сокета?


B>>На сокетах писать надо.

DT>Да, и непременно в машинных кодах
Ну я же ассемблер не предлагаю, а мог бы

B>>А так нужно ставить таймаут, чтобы вызвать ошибку ERROR_WINHTTP_TIMEOUT, тогда все будет корректно.

DT>Неужели ставить таймаут в 100 мс, и все это обрабатывать?? Криво по-моему.
DT>Вот пример — получение real-time звука. Сервер отдает кусочки по полсекунды через полсекунды, все это непрерывно в одном запросе, до разрыва соединения.
DT>То есть WinHTTPReadData может ждать полсекунды следующую порцию. И за это время 3 раза выпасть в таймаут-error??
А что Вы хотите от синхронной операции? Контроль? Это достигается либо таймаутом либо убийством. Нужно отлавливать ошибку таймаута и соответственно поступать. Или все таки асинхронный режим юзать.
Жизнеспособность прямо пропорциональна простоте!
Re[3]: WinHTTP - прерывание операции
От: acDev Россия  
Дата: 20.10.11 06:40
Оценка:
Здравствуйте, DarkTranquillity, Вы писали:

D>>А пробовал просто закрыть хэндл?


DT>Я думал об этом, но это же криво, и вообще UB, в МСДН написано четко:


DT>
The handles that are created and used by WinHTTP are called HINTERNET handles. 
The WinHTTP functions return HINTERNET handles that are not interchangeable with other handles, 
so they cannot be used with functions such as ReadFile or CloseHandle. Similarly, other handles 
cannot be used with WinHTTP functions. For example, a handle returned by CreateFile cannot 
be passed to WinHttpReadData. These HINTERNET handles cannot be closed while an API call 
using the handle is in progress. To avoid a race condition, applications should protect 
the handle and prevent it from being closed for as long as the API call is in progress.
DT>


Да пофигу что они там пишут. Ты попробуй вызвать WinHttpCloseHandle и напиши нам о результатах. И будем думать далее...
Re[4]: WinHTTP - прерывание операции
От: ZOI4  
Дата: 20.10.11 08:12
Оценка:
Здравствуйте, acDev, Вы писали:

D>Да пофигу что они там пишут. Ты попробуй вызвать WinHttpCloseHandle и напиши нам о результатах. И будем думать далее...


Вспомнилось:

20.02. Алекс, наконец, доделал свои изменяющиеся окна. Тестировали.
Выяснилось, что при изменении размера окна в нем бьются стекла.
Кроме того, наблюдается ряд побочных эффектов. Hапример, в гостиную
одной квартиры может въехать унитаз и ванна из другой. Также иногда
исчезают двери и осыпаются балконы. Жаловаться на стройкомбинат
бесполезно — они скажут, что нечего пользоваться недокументированными
функциями.

Мафиозная диктатура это нестабильность. Если не мафиозная диктатура, то Конституция и демократия.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.