2009-09-07 4 views
4

C의 자바 코드에 콜백을 전달할 수있는 방법이 있습니까? 즉시 호출이 반환됩니다. 나중에 태스크를 완료 한 후 java 코드가 해당 콜백을 호출 할 수 있습니다.jni의 콜백

나는 그것에서 일부 항목을 저장하는 자바 가게를 호출 PHP를위한 C 확장 있습니다. 항목은 동기식 및 비동기식 방식으로 저장소에서 검색 할 수 있습니다 (키와 콜백 목록을 저장소에 제공하고 콜백을 호출하고 항목을 반환 함).

나는 확장에서 동 기적으로 항목을 검색 할 수,하지만 지금은 비동기 작업을 수행하는 방법을 모르겠어요.

  • 내 C 코드가 나중에 Java에서 호출 할 수있는 함수에 대한 포인터를 제공 할 수있는 방법이 있습니까?
  • 또는 그것이 내가 자바 스레드마다의 C 코드를 작성하는 것이 가능하다 비동기 항목을 검색하도록 요청하고, 그 자바 스레드는 사용자에게 항목을 다시 반환 할 수있는 C 함수를 호출?

마지막으로 C 코드에서 스레드를 만들고 Java에서 검색 할 수있는 해당 스레드의 키를 큐에 넣어야 할 수도 있습니다.

또는 내가 작업을 대기열 수 젠드의 모든 지원과 큐의 모든 작업 하나 하나를 호출 할 수 젠드 콜백이있다?

답변

4

C 함수를 호출하는 자바에 대한 방법은 기본 클래스 메소드입니다. 그냥 네이티브 메서드가 자바 (아마 콜백 인터페이스를 구현)에서 어떤 클래스를 확인하십시오. 컴파일하고 JDK의 javah 도구를 사용하여 처리하십시오. 이렇게하면 함수 서명이있는 헤더가 작성됩니다. 그런 다음 네이티브 코드에서이 함수를 구현할 수 있습니다.

당신은 콜백을 제공해야하는 경우 - NewObject를 통해이 클래스의 새로운 인스턴스()를 작성하고 자바 코드에 전달합니다.

+0

네이티브 함수 호출은 C 프로그램이 이미로드 한 유효한 JniEnv 포인터를 제공합니까? 클래스의 새 인스턴스를 만들어 Java에 전달하는 것이 중요합니까? 샘플 코드를 제공해 줄 수 있습니까? – ata

+0

예를 들어 함수가 native int callback (string)으로 선언되었습니다. C 서명 jint를가집니다. Java_com_mypackage_MyClass_callback (JNIEnv * env, jobject class_instance, jstring 매개 변수) - env, 콜백 클래스 및 모든 매개 변수에 대한 포인터가 있습니다. 나중에 샘플 코드를 제공하려고 노력할 것입니다. – Xeor