Re[4]: CancelIoEx вешает программу
От: remark Россия http://www.1024cores.net/
Дата: 29.07.13 21:52
Оценка:
Здравствуйте, acDev, Вы писали:

R>>Это минимальный репродьюсер проблемы из большой программы.


R>>И, да, ошибка не в этом. Я видел, что потоки висят в WSAGetOverlappedResult.


D>По логике вызов CancelIoEx должен происходить только тогда, когда поле Internal структуры OVERLAPPED содержит 997 (WSA_IO_PENDING).

D>В вашем же когда это условие не выполняется.

Тогда я не понимаю, как потенциально CancelIoEx может отменять операции в других потоках -- основное назначение функции. Если IO происходит в одном потоке, а CancelIoEx — в другом, то завершение IO и CancelIoEx по определению происходят одновременно. Следовательно состояние OVERLAPPED может меняться из PENDING в "завершено".
Мое понимание, что CancelIoEx можно звать даже для уже завершенной оперции. В этом случае она возращает документированный код возврата ERROR_NOT_FOUND.

Если это не так, то как тогда вообще использовать CancelIoEx?

1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.