PCAN_RECEIVE_EVENT를 설정하면 PCAN 데이터를 받을 때에만 동작한다.
CAN_SetValue (class-method : SetValue) 함수를 호출 -> Win32 동기화 함수 (예 : WaitForSingleObject) 중 하나를 사용하여 이벤트 신호를 받을 때까지 대기 -> CAN_Read (클래스 메소드 : 읽기) 함수로 읽을 수 있으며 CAN 메시지를 처리
SetValue로 이벤트를 설정하고 Win32 동기화 함수를 통해 대기 할 시, 프로세스 로드가 증가 없이 데이터 읽기가 가능하다.
원문 번역.
이벤트를 사용하려면
클라이언트 응용 프로그램이 CAN_SetValue (class-method :
SetValue) 함수를 호출하여 매개 변수 PCAN_RECEIVE_EVENT를 설정해야합니다. 이 매개 변수는 이벤트 객체의
핸들을 설정합니다. 메시지를 받으면 드라이버는이 이벤트를 "Signaled"상태로 설정합니다.
다른 스레드는 프로세스 로드를 증가시키지 않고 Win32 동기화 함수 (예 : WaitForSingleObject) 중 하나를 사용하여 이벤트 신호를 받을 때까지 대기하는 클라이언트 어플리케이션에서 시작해야함.
이벤트가 신호되고 나면 클라이언트의 수신 버퍼를 CAN_Read (클래스 메소드 : 읽기) 함수로 읽을 수 있으며 CAN 메시지를 처리
할 수 있습니다.
ref: http://www.peak-system.com/
sample code :
can.h
classA {
....
DWORD readthread();
HANDLE m_hEvent; // 이벤트 핸들
....
}
---------------------------------------
can.cpp
DWORD classA::readthread()
{
....
LOADAPI.SetValue(m_PcanHandle, PCAN_RECEIVE_EVENT,
&m_hEvent, sizeof(m_hEvent));
if
(m_hEvent == NULL) {
return
RETURN::FAIL;
}
while (1) {
//Wait
for CAN Data...
result
= WaitForSingleObject(m_hEvent, 10000);
if
(result == WAIT_OBJECT_0)
LOADAPI.Read(m_PcanHandle,
&CANMsg, &CANTimeStamp);
}
No comments:
Post a Comment