JNA를 사용하여 Mac에서 Carbon
프레임 워크를 사용하여 OS 이벤트를 수신하는 API를 만들었습니다. 지금과 같이 정의 Carbon.framework
의 기능이있다 :스레드가 ReceiveNextEvent에서 차단되는 중
, 내 JNA 호출에서 아래 작성했습니다 :inNumTypes
어떤 이벤트가 발생할하는 경우는 이벤트 유형의 수 (0 기다리는 :
OSStatus ReceiveNextEvent ( ItemCount inNumTypes, //ItemCount is a 32-bit iteration count const EventTypeSpec *inList, //EventTypeSpec is a structure EventTimeout inTimeout,//EventTimeout is double-length integer of type EventTime Boolean inPullEvent, EventRef *outEvent );
문서이 말한다 반환하는이 함수). inList. 우리가 기다리고있는 이벤트 타입의리스트. 어떤 이벤트라도이 함수를 반환해야한다면 NULL을 전달한다.
시간 종료 반환하기 전에 대기 할 시간입니다 (kEventDurationForever 전달 권장).  lue
inPullEvent 다음 일치하는 이벤트를 대기열에서 제거하려면이 매개 변수를 true로 전달하십시오.
outEvent 전달 된 목록과 일치하는 다음 이벤트를 가리키는 포인터입니다. inPullEvent 매개 변수에서 true를 전달하면 해당 이벤트는 사용자 소유이므로 완료되면 해제해야합니다.
반환 값 이벤트가 수신되었거나 시간 만료되었거나 현재 이벤트 루프가 종료되었는지 여부를 나타내는 결과입니다. 가능한 값은 "Carbon Event Manager 결과 코드"(257 페이지)를 참조하십시오. 토론
이 함수는 지정된 유형의 다음 이벤트를 가져 오려고 시도합니다. 이벤트 대기열의 이벤트가 일치하지 않으면이 함수는 일치하는 이벤트가 도착하거나 시간 초과가 만료 될 때까지 현재 이벤트 루프를 실행합니다. 타이머가 작동하는 것을 제외하고이 함수 내부에서 이벤트가 도착하기를 기다리면서 응용 프로그램이 차단됩니다. 같은 들어
NativeLong ReceiveNextEvent(NativeLong inNumTypes, EventTypeSpec[] inList,float inTimeout ,boolean inPullEvent, EdSdkLibrary.__EdsObject outEvent);
__EdsObject
는 PointerType
를 확장합니다. 스레드가 문 밖으로 나오지 않는 이유, 그러나 하나님은 알고
carbon.ReceiveNextEvent(new NativeLong(1), null, 1.0f, true, eventRef)
로
public static class __EdsObject extends PointerType {
public __EdsObject(Pointer address) {
super(address);
}
public __EdsObject() {
super();
}
};
EventTypeSpec is:
public class EventTypeSpec extends Structure {
public int eventClass;
public int eventKind;
protected List getFieldOrder() {
return Arrays.asList(new String[]{"eventClass", "eventKind"});
}
}
및 전화
이다. 흥미로운 점은 이벤트를 받고 파견하지만 출현하지 않는다는 것입니다. 함수를 정의한 방식과 관련이 있습니까?
수동으로 이벤트를 보내면 메소드가 반환됩니까? 'PostEventToQueue (GetMainEventQueue(), dummy_event, kEventPriorityStandard);'? – technomage
좋은 포인트. 나는 곧바로 노력할 것이다. – Jatin
부동 소수점 인수는 'double'이어야합니다. – technomage