Здравствуйте, justason, Вы писали:
J>void USB_ReadThread() J>{ J> // блокирующий — так надо: ждет чего-нибудь из USB девайса J> ReadFile(usbHandle, Buff, buff.Length, ref BytesRead, null); J> ... J>}
J>void Close() J>{ J> readThread.Abort();
J> CloseHandle(usbHandle_read); // Вот здесь виснем... видимо до окончания ReadFile J>}
J>Как правильнее убить этот поток?
никак, для таких случаев используются асинхронные операции
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re[3]: Убить thread заблокированный ReadFile
От:
Аноним
Дата:
06.03.07 08:36
Оценка:
А>>Можно попробовать перед тем, как убивать поток, закрыть usbHandle_read, может он тогда выскочит из ReadFile().
_M_>не выскочит
А что будет? Тот кто станет закрывать тоже зависнет?
Или CloseHandle() вернёт ошибку?
Ну, тогда это откровенная кривость
Хотя, тут, конечно, многое зависит от писателя драйвера устройства, которое читают.
Здравствуйте, <Аноним>, Вы писали:
А>>>Можно попробовать перед тем, как убивать поток, закрыть usbHandle_read, может он тогда выскочит из ReadFile().
_M_>>не выскочит
А>А что будет? Тот кто станет закрывать тоже зависнет?
угу
А>Или CloseHandle() вернёт ошибку? А>Ну, тогда это откровенная кривость А>Хотя, тут, конечно, многое зависит от писателя драйвера устройства, которое читают.
дело тут не в драйвере, а в ядре Windows.
для таких вещей нужно использовать асинхронные операции, тогда проблем не будет