Блокировка DLL драйвера устройства против неблокирования? - PullRequest
2 голосов
/ 16 декабря 2009

Моя компания производит продукт, который подключается к ПК через USB. Я пишу драйвер DLL, используя Visual C #, для этого продукта, так что любой, кто хочет написать программу, которая может управлять или устройство, может сделать это. Некоторым операциям, которые драйвер выполнит, потребуется несколько секунд для завершения устройства (например, перемещение двигателя на устройстве на 10000 шагов). Я рассматриваю два разных подхода к этому драйверу, и я не уверен, что идеально.

Первый подход: сделать команды неблокирующими. Обычно клиентское приложение вызывает метод в моей dll для запуска вращения двигателя, и этот метод немедленно возвращается. Тогда у меня будет событие «MoveFinished», которое запускается, когда движение заканчивается. Такой подход позволил бы клиентскому приложению не зависать и выполнять другие операции во время движения двигателя без использования многопоточности.

Второй подход: сделать блокировку команд. Поэтому, когда клиентское приложение вызывает метод Move, метод блокируется и не возвращается, пока перемещение не будет завершено. Это может привести к зависанию клиентского приложения во время перемещения (если они не используют многопоточность), но это также может быть полезно, поскольку оно не позволит клиентскому приложению совершать глупые ошибки, такие как вызов метода move во время работы устройства. уже движется ...

У кого-нибудь есть опыт, мудрость, комментарии или мысли, которыми можно поделиться?

1 Ответ

2 голосов
/ 16 декабря 2009

Я бы сделал оба. Поскольку вы пишете API на свое устройство, я бы дал конечному пользователю гибкость в выборе способа работы метода. Синхронизация или асинхронность.

Если вы можете выбрать только один маршрут, я бы предпочел Async. Причина в том, что большинству пользователей, разрабатывающих устройства, скорее всего, не понравится зависание приложения во время завершения процесса устройством.

Хорошая структура событий, о которой вы говорите.

...