jni和事件函数

jaxagkaj  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(322)

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

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();
}

设置此事件回调后,库将向给定函数激发此事件。我可以在本机lib中设置函数和回调,但我不知道如何将其发送到java应用程序。任何人都可以给我一个提示,如何处理这个与jni?

f0ofjuux

f0ofjuux1#

在c++端,使用管道(2)创建一对文件描述符。然后只需在写入端写入更新,完成后关闭。
在java端,获取读取端的文件描述符(例如通过jni传递)。让java打开一个 InputStream/dev/fd/X 在另一个线程中读到eof。

相关问题