2009-12-16 7 views
2

저희 회사는 USB를 통해 PC에 연결하는 제품을 만듭니다. 이 제품에 대해 Visual C#을 사용하여 DLL 드라이버를 작성하므로 제어 또는 장치 할 수있는 프로그램을 작성하려는 모든 사용자가 그렇게 할 수 있습니다. 드라이버가 실행하는 일부 작업은 장치가 완료 될 때까지 수 초가 걸립니다 (예 : 장치에서 모터를 10,000 단계 이동). 나는이 드라이버에 대해 두 가지 다른 접근법을 고려하고 있으며 어느 것이 이상적인지 확실하지 않습니다.장치 드라이버 DLL 블로킹과 비 블로킹?

첫 번째 방법 : 비 차단 명령을 만듭니다. 기본적으로 클라이언트 응용 프로그램은 내 dll에서 모터 터닝을 시작하는 메서드를 호출하고 해당 메서드는 즉시 반환합니다. 그런 다음 이동이 끝나면 트리거되는 'MoveFinished'이벤트가 있습니다. 이 방법을 사용하면 멀티 스레딩을 사용하지 않고 모터가 움직이는 동안 클라이언트 응용 프로그램이 멈추지 않고 다른 작업을 수행 할 수 있습니다.

두 번째 방법 : 명령을 차단하십시오. 따라서 클라이언트 응용 프로그램에서 Move 메서드를 호출하면 메서드가 차단되고 이동이 완료 될 때까지 반환되지 않습니다. 이것은 이동이 일어나고있는 동안 (멀티 스레딩을 사용하지 않는 한) 클라이언트 어플리케이션을 정지 시키지만, 클라이언트 어플리케이션이 디바이스가 움직이는 동안 move 메소드를 호출하는 것처럼 바보 같은 실수를하지 않게하는 데 유용 할 수도 있습니다 이미 움직이고 있습니다 ...

경험, 지혜, 의견 또는 생각을 공유하는 사람이 있습니까?

답변

2

나는 둘 다 할 것이다. API를 디바이스에 쓰고 있기 때문에 최종 사용자는 메소드를 원하는 방식으로 작동하도록 결정할 수 있습니다. 동기화 또는 비동기.

하나의 경로 만 선택할 수 있다면 비동기를 선호합니다. 그 이유는 디바이스에 대해 개발하는 대부분의 사용자는 디바이스가 프로세스를 완료하는 동안 어플리케이션이 정지되는 것을 거의 좋아하지 않기 때문입니다.

당신이 말하는 이벤트 구조가 좋습니다.