내 논문 Head-Tracking 센서를 기존의 자동차 시뮬레이터 소프트웨어에 연결해야합니다. 자동차 시뮬레이터는 DDE를 통해 TCL 명령을받을 수 있으며 지금까지 통신 채널을 성공적으로 설정했습니다. 아이디어는 센서의 데이터를 사용하여 시뮬레이터 창의 현재 뷰를 조정하는 것입니다.DDE와 함께 사용하기 위해 TCL에서 "ACKs"구현
센서 데이터는 DDE 클라이언트 역할을하는 C++ 응용 프로그램을 사용하여 처리되며 DDE 서버 (시뮬레이터)에 명령 문자열을 보냅니다. Microsoft에서 예를 사용하여 (여기 참조 : http://support.microsoft.com/kb/279721/en-us를) 나는 다음 행으로 명령 문자열을 보내고있다 :
DdeClientTransaction((LPBYTE)hData, 0xFFFFFFFF, hConv, 0L, 0, XTYP_EXECUTE,
TIMEOUT_ASYNC, NULL);
다른 기능은 시뮬레이터에 TCL 인터프리터에 전송하는 문자열을 호출 한 후 변수 hData
대표 . 나는 반복적으로 보내고있다 명령 문자열은 시뮬레이터에 독점적이며 다음과 같습니다 경우
"Movie eval {dict set View(0:0) xrot %s; dict set View(0:0) yrot %s; dict set View(0:0) zrot %s;}"
당신이 %s
이 headtracker의 요, 피치와 롤에 대한 자리 표시 자입니다 궁금합니다. 모든 것이 올바르게 작동합니다. 그러나 시뮬레이터의 TCL 인터 피터 (intereter)가 때로 속도가 느려지고 전체 시뮬레이터를 교수형에 처하는 느낌을 받았다.
DdeClientTransaction
-function은 transaccion이 성공했는지/사용 중인지 여부와 DDE 서버 (시뮬레이터) 스패밍을 피하기 위해이 값을 사용하므로 TCL 인터프리터가되는 것으로 의심됩니다. 느린.
내 질문이 있습니다 : 명령 문자열에 추가 할 수있는 TCL 명령이나 다른 방법으로 인터프리터가 DDE를 통해 다음에받은 명령을 처리 할 수 있습니까? 이전 명령으로 완료되면 명령이 더 대기 상태가됩니다. 최대, 그냥 최신 하나 처리?
나는 update;
을 보내는 것을 지적했습니다
"Movie eval {dict set View(0:0) xrot %s; dict set View(0:0) yrot %s; dict set View(0:0) zrot %s; update;}"
더 안정적이지만, 꽤 그것이 무엇을 이해하지 않습니다.
의견을 보내 주셔서 감사합니다. 나는''유휴''명령에 대해 조금 읽었으며''after cancel'' 명령도 있음을 알았습니다. 내 "'"Movie eval {...} "''명령에이 둘을 모두 추가 할 수 있습니까? 다음 대기 상태에 대한 명령을 대기열에 넣고 어떤 이유로 든 다음 명령을 받기 전에'' "Movie eval {...}''"명령을 사용하지 않으면 명령을 취소하고 새 명령을 대기열에 넣으시겠습니까? – Skavee