当前位置: 首页 > 知识库问答 >
问题:

JNI和事件函数

巴帅
2023-03-14

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

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

共有1个答案

康赞
2023-03-14

在C端,使用管道(2)创建一对文件描述符。然后只需将更新写入写入端,完成后关闭。

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

 类似资料:
  • update 动画开始播放后,每帧都会触发此回调。 Type Parameters Info Function animation 返回当前动画对象 var updates = 0; anime({ targets: '.update-demo .el', translateX: 270, delay: 1000, direction: 'alternate', loop:

  • 在这里输入代码需要在kafka流中使用flink和out聚合数据值放一个新的主题。 聚合应该发生在eventtime,而不是进程时间,这意味着数据对象中的时间戳。 遵循Flink教程中的示例,使用TumblingEventTimeWindow,但根本不调用聚合getResult方法。 如果我更改为TumblingProcessingTimeWInow,getResult将被调用并将结果下沉。 由于

  • 8.3.1 事件和事件对象 事件是针对应用程序所发生的事情,并且需要应用程序对它做出响应或进行处理。Tkinter中定义了很多种事件,足以支持常见的 GUI 应用程序开发。 Tkinter 事件可以用特定形式的字符串来描述,称为事件模式。事件模式的一般形式是: <modifier-type-detail> 其中类型符 type 指定事件类型,最常用的类型有分别表示鼠标事件和键盘事件的 Butto

  • 事件函数 传统编程的思路是,在一个循环结构中连续运行代码,直到完成任务。Unity 中的脚本则不同,Unity 通过间歇地调用脚本中声明的特定函数来控制脚本。一旦某个函数执行完成,控制权被交会 Unity。这些函数被成为事件函数,因为 Unity 通过激活它们来响应游戏过程中发生的各种事件。Unity 使用一套命名方案来唯一标识特定事件对应(调用)的函数。例如,你已经看到的 Update 函数(每

  • 本文向大家介绍深入理解Node.js 事件循环和回调函数,包括了深入理解Node.js 事件循环和回调函数的使用技巧和注意事项,需要的朋友参考一下 本文详细的介绍了Node.js 事件循环和Node.js回调函数,废话不多说了,具体看下面把。  一、Node.js 事件循环 Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。Node.js 的每一个 API 都是异

  • 15.3.2.JNI 头文件 接下来需要做的首先是,创建相应的JNI头文件。这需要用到一个Java的标准工具,也就是javah。它附带在JDK中,你可以在JDK/bin中找到它。 跳转到项目的bin目录,执行: [Fibonacci/bin]> javah -jni com.marakana.FibLib javah -jni取一个类名作为参数。需要注意,不是所有的类都默认处于Java的Class