3 / 3 / 3
Регистрация: 26.09.2009
Сообщений: 77
|
|
1 | |
Асинхронные операции на C#30.08.2011, 18:32. Показов 3807. Ответов 9
Метки нет (Все метки)
Реализую обмен данными с устройством по USB-каналу (bulk передача) с использованием функций WinUSB API.
Хочу реализовать асинхронное чтение (функция WinUsb_ReadPipe), по типу того как это стандартно делается на "C" с использованием структуры OVERLAPPED и функций WaitForMultipleObjects или WaitForSingleObject. Подскажите, как это реализовать на C#. Насколько я понимаю, необходимо подключить API-функции при помощи DllImport, но будет ли это работать? И ещё не ясно как объявить указатель на структуру OVERLAPPED. Если есть примеры, дайте, пожалуйста, ссылку. Или может есть какой-нибудь другой способ организации асинхронной работы на C#.
0
|
30.08.2011, 18:32 | |
Ответы с готовыми решениями:
9
Асинхронные операции Асинхронные операции Синхронные/асинхронные операции Асинхронные операции |
мастер топоров
916 / 741 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
|
|
30.08.2011, 19:41 | 2 |
в C# есть синхронные операции чтения потока: Stream.BeginRead
можно создать поток из файла, который на флешке и читать с него информацию асинхронно
0
|
3 / 3 / 3
Регистрация: 26.09.2009
Сообщений: 77
|
|
30.08.2011, 21:32 [ТС] | 3 |
Я работаю не с флешкой и файлами, а с устройством, которое периодически выкидывает в канал данные, которые надо вычитывать. Удобно это сделать в потоке, который приостанавливается функцией WaitForSingleObject до прихода байта, что позволяет разгрузить программу.
Думаю, что должен быть альтернативный механизм в C#, подскажите как реализовать.
0
|
3 / 3 / 3
Регистрация: 26.09.2009
Сообщений: 77
|
|
01.09.2011, 09:47 [ТС] | 4 |
Как организовать непосредственно асинхронное чтение я представляю - BeginInvoke и т.д., ВАЖНО реализовать работу именно с ПЕРЕКРЫВАЕМЫМИ операциями, чтобы усыплять поток на время чтения и не терять процессорное время.
0
|
45 / 44 / 7
Регистрация: 15.10.2008
Сообщений: 320
|
|
05.09.2011, 17:14 | 5 |
попробуй тут почитать Асинхронные операции и AsyncEnumerator.
0
|
3 / 3 / 3
Регистрация: 26.09.2009
Сообщений: 77
|
|
05.09.2011, 17:46 [ТС] | 6 |
По-моему всё не то. Здесь нет усыпления (приостановки выполнения) потока при выполнении асинхронных операций, а значит поток продолжает периодически вызываться и жрет процессорное время.
0
|
05.09.2011, 19:43 | 7 | |||||
Сильно не вникал в вопрос, бегло глянул. Не это ли нужно?
AutoResetEvent Или вообще посмотри какие есть классе в пространстве имён System.Threading
0
|
3 / 3 / 3
Регистрация: 26.09.2009
Сообщений: 77
|
|
06.09.2011, 12:12 [ТС] | 8 |
Спасибо, вроде похоже на то, что нужно. Осталось только разобраться как эти AutoResetEvent (ну или EventWaitHandle) правильно в OVERLAPPED запихнуть и в перекрываемую операцию передать.
0
|
1274 / 975 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
|
|
06.09.2011, 15:57 | 9 |
Показал бы код на С лучше, судя по описанию этого WinUsb_ReadPipe никакие ресет евенты не помогут тут
Да и вообще в дотнете даже есть готовая реализация OVERLAPPED http://msdn.microsoft.com/en-u... apped.aspx Добавлено через 21 минуту А если немного погулить что-то в стиле "Winusb net wrapper" то можно даже найти готовые решения, например http://www.asyncop.net/MTnPDir... +Component
0
|
3 / 3 / 3
Регистрация: 26.09.2009
Сообщений: 77
|
||||||
06.09.2011, 16:22 [ТС] | 10 | |||||
Вот код на C, который хочу втащить в .NET
0
|
06.09.2011, 16:22 | |
06.09.2011, 16:22 | |
Помогаю со студенческими работами здесь
10
Как работают асинхронные операции в Qt Как отменить все асинхронные операции отдельного потока сервера ? Асинхронные делегаты Асинхронные процессы Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |