Java JNI和事件函数

Java JNI和事件函数,java,c++,java-native-interface,Java,C++,Java Native Interface,在我的JNI项目中,我需要向java客户机添加事件/回调,该客户机将从本机库接收此事件。在C++中,我这样做:< /P> 基于对话框的: SetProcessEventCallback((ProcessEvent) KSampleDlg::OnProcessEvent, this); void KSampleDlg::OnProcessEvent(float fPercent, float fDeviceBuffer, float fCache, double dBytesWritten, d

在我的JNI项目中,我需要向java客户机添加事件/回调,该客户机将从本机库接收此事件。在C++中,我这样做:< /P> 基于对话框的:

SetProcessEventCallback((ProcessEvent) KSampleDlg::OnProcessEvent, this);

void KSampleDlg::OnProcessEvent(float fPercent, float fDeviceBuffer, float fCache, double dBytesWritten, double dImageSize, KSampleBurnDlg *pDlg) 
{
    pDlg->SetProgress((int)fPercent, (int)fCache);
}
在控制台应用程序中,它就像

SetProcessEventCallback(OnProcess, 0);

void OnProcess(float fPercent, float fDeviceBuffer, float fCache, 
               double dBytesWritten, double dImageSize, void *pUserData)
{
    static int nChars = 0;
    g_cOutputLock.Lock();

    while( (fPercent/100.0)*80 > nChars )
    {
        g_strBuffer += _T("*");
        nChars++;
    }
    g_cOutputLock.UnLock();
}
设置此事件回调后,库将向给定函数触发此事件。 我可以在本机库中设置函数和回调,但我不知道如何将其发送到java应用程序。 任何人都可以给我一个提示,如何在JC++的边上用JNI?< /P> < P>处理,使用管道(2)创建一对文件描述符。 然后只需将更新写入写入端,完成后关闭


在Java端,获取读取端的文件描述符(例如通过JNI传递)。让Java在
/dev/fd/X
上打开一个
输入流
,并在一个单独的线程中读取直到EOF。

回调在哪个线程上运行?我觉得你可能需要做一些像java一样的事情。如果你只想交流一个百分比,你也可以在java和C++之间使用一个普通的管道,跳过JNI。@ Bojje,你有更多的信息吗?也请让Java打开<代码>输入流<代码> >代码> /DEV/FD/X…这确实假设Linux或类似的软件是正确的。出于某种原因,我认为这是在安卓系统上的。可能是这样。问题中根本没有说明。