Такая проблема, если кто знает как можно решить буду очень благодарен, есть видеокамера, под неё в винде установлен драйвер, для драйвера есть длл АПИ для работы с камерой, в этой длл есть функция для захвата картинки из камеры. В общих чертах функция работает следующим образом: шлёт IOCTL на драйвер видеокамеры и тупо ждёт ответа функцией GetOverlappedResult, но этот метод хреновый так как если вдруг чтото случится (например выдернут камеру) то прога будет ждать прихода запроса пока не придёт конец света (или ресет ) что совсем не гуд. Естественно тут сразу напрашивается повесить этот Overlapped Event на WaitForSingleObject в котором можно поставить таймаут, но этот метод тоже хреновый для приёма видео, так как при захвате видео в реальном времени получается что при получении каждого кадра тред уходит в сон и потом просыпается, на всю эту батву тратится много времени поэтому камера вместо того чтобы показывать нормально видео с 15 фпс даёт всего 2,5 - что совсем хреново. Может в винде существуют какие нить другие более быстрые и неизвращённые способы решения этой проблемы???
я думал над этим вариантом, вообще видео принимается отдельным потоком, удалённо контролировать этот тред сложно, хрен пойми что он там делает принимает или тормозит, а если каждый кадр получать в отдельном потоке то я думаю что врятле он 15 фпс будет тянуть, создание потока потока давольно трудоёмкий,потом будет много гемора с передачей буферов между потоками, ну в крайнем случае можно попробовать и этот вариант. Вообще странно почему WaitForSingleObject работает так долго...
суть не в этом, да возможно этот вариант можно обработать как нить более корректно, но суть не в этом, нужно чтобы камера умела работать в режиме триггера, те аппаратно на камеру подаётся прерывание и она делает снимок, прога и драйвер в это время ожидает прихода этого кадра, но допустим это аппаратное прерывание не сработало, и нужно это корректно обработать, те прога должна выдать ошибку если триггер видео камеры не отвечает в течении какого-то времени, так что в любом случае нужно делать через таймауты.