2009-12-16 5 views
2

Mon entreprise fabrique un produit qui se connecte au PC via USB. J'écris un pilote DLL, en utilisant Visual C#, pour ce produit afin que toute personne qui veut écrire un programme qui peut contrôler ou un périphérique peut le faire. Certaines opérations exécutées par le pilote prennent plusieurs secondes pour que l'appareil soit terminé (par exemple, le moteur doit être déplacé dans l'appareil sur 10 000 pas). Je considère deux approches différentes de ce pilote et je ne suis pas sûr de ce qui est idéal.Pilote de périphérique DLL Blocking vs NonBlocking?

Première approche: Rendre les commandes non bloquantes. Fondamentalement, l'application client appelle une méthode dans ma DLL pour démarrer le moteur tournant et cette méthode reviendrait immédiatement. Ensuite, j'aurais un événement, 'MoveFinished' qui est déclenché lorsque le mouvement est terminé. Cette approche permettrait à l'application client de ne pas geler et de faire d'autres opérations pendant que le moteur se déplace sans utiliser le multi-threading.

Deuxième approche: Bloquer les commandes. Ainsi, lorsque l'application cliente appelle la méthode Move, la méthode se bloque et ne revient pas tant que le déplacement n'est pas terminé. Cela provoquerait le gel de l'application cliente pendant le déplacement (à moins qu'ils n'utilisent le multithread) mais cela pourrait aussi être utile car cela ne permettrait pas à l'application cliente de faire des erreurs idiotes comme l'appel de la méthode move pendant que le périphérique est déjà en mouvement ...

Est-ce que quelqu'un a de l'expérience, de la sagesse, des commentaires ou des idées à partager?

Répondre

2

Je ferais les deux. Puisque vous écrivez une API dans votre appareil, je donnerais à l'utilisateur final la possibilité de décider comment il veut que la méthode fonctionne. Synchronisation ou Async

Si vous ne pouvez choisir qu'une seule route, je préférerais Async. La raison en est que la plupart des utilisateurs qui développent sur l'appareil ne souhaiteraient probablement pas que l'application se bloque pendant que l'appareil termine un processus.

La structure d'événement dont vous parlez est bonne.

Questions connexes