Убить thread заблокированный ReadFile
От: justason  
Дата: 02.03.07 09:07
Оценка:
Есть вот такая конструкция:

readThread = new Thread(new ThreadStart(USB_ReadThread));
readThread.Start();


void USB_ReadThread()
{
// блокирующий — так надо: ждет чего-нибудь из USB девайса
ReadFile(usbHandle, Buff, buff.Length, ref BytesRead, null);
...
}

void Close()
{
readThread.Abort();

CloseHandle(usbHandle_read); // Вот здесь виснем... видимо до окончания ReadFile
}

Как правильнее убить этот поток?
Re: Убить thread заблокированный ReadFile
От: Mab Россия http://shade.msu.ru/~mab
Дата: 02.03.07 09:08
Оценка: +1
Здравствуйте, justason, Вы писали:

J>Как правильнее убить этот поток?

Никак. Нужно использовать асинхронный режим.
Re: Убить thread заблокированный ReadFile
От: Аноним  
Дата: 05.03.07 13:58
Оценка:
Можно попробовать перед тем, как убивать поток, закрыть usbHandle_read, может он тогда выскочит из ReadFile().
Re[2]: Убить thread заблокированный ReadFile
От: _Morpheus_  
Дата: 05.03.07 18:27
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Можно попробовать перед тем, как убивать поток, закрыть usbHandle_read, может он тогда выскочит из ReadFile().


не выскочит
... << RSDN@Home 1.2.0 alpha rev. 676>>
Re: Убить thread заблокированный ReadFile
От: _Morpheus_  
Дата: 05.03.07 18:27
Оценка:
Здравствуйте, 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() вернёт ошибку?
Ну, тогда это откровенная кривость
Хотя, тут, конечно, многое зависит от писателя драйвера устройства, которое читают.
Re[4]: Убить thread заблокированный ReadFile
От: _Morpheus_  
Дата: 06.03.07 11:42
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>>>Можно попробовать перед тем, как убивать поток, закрыть usbHandle_read, может он тогда выскочит из ReadFile().


_M_>>не выскочит


А>А что будет? Тот кто станет закрывать тоже зависнет?


угу


А>Или CloseHandle() вернёт ошибку?

А>Ну, тогда это откровенная кривость
А>Хотя, тут, конечно, многое зависит от писателя драйвера устройства, которое читают.

дело тут не в драйвере, а в ядре Windows.

для таких вещей нужно использовать асинхронные операции, тогда проблем не будет
... << RSDN@Home 1.2.0 alpha rev. 676>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.