Java JNI和事件函数
在我的JNI项目中,我需要向java客户机添加事件/回调,该客户机将从本机库接收此事件。在C++中,我这样做:< /P> 基于对话框的: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
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或类似的软件是正确的。出于某种原因,我认为这是在安卓系统上的。可能是这样。问题中根本没有说明。