小编Lod*_*ijk的帖子

如何在JNI环境的本机端正确同步线程?

问题简介

我通过JNI在一个进程中使用C++和Java.对于有问题的用例,C++线程和Java线程都访问相同的数据,他们在C++端这样做,我想正确地同步访问.

到目前为止,几乎所有的JNI线程同步都在Java端,答案显而易见:使用提供的Java并发包和内置的并发语言功能.不幸的是,答案在C++方面并不那么明显.

我到目前为止所尝试的内容

我尝试使用pthreads互斥锁认为它可能会工作,即使我没有使用pthreads来创建线程,但是在尝试锁定时偶尔会卡住 - 我将在下面展示更远的示例.

问题详情

在我目前的具体用法中,c ++正在轮询Java在1秒计时器上提供的更改(不是我想要的,但我不知道如果考虑到遗留c ++代码的性质,我将如何使其成为事件驱动的).Java线程通过调用本机函数来提供数据,c ++将数据复制到c ++结构中.

这是代码中的情况类型(发生在2个线程,Thread1和Thread2):

代码示例

请注意SSCCE,因为它缺少TheData和的定义TheDataWrapper,但它们包含的内容并不重要.假设它们只包含几个公共ints,如果这有助于你的思考过程(虽然,在我的情况下,它实际上是多个int数组和float数组).

C++:

class objectA
{
    void poll();
    void supplyData(JNIEnv* jni, jobject jthis, jobject data);
    TheDataWrapper cpp_data;
    bool isUpdated;

    void doStuff(TheDataWrapper* data);
};

// poll() happens on a c++ thread we will call Thread1
void objectA :: poll()
{
    // Here, both isUpdated and cpp_data need synchronization

    if(isUpdated)
    {
        do_stuff(&cpp_data);
        isUpdated = false;
    }
}

// supplyData happens on the …
Run Code Online (Sandbox Code Playgroud)

c++ java java-native-interface multithreading synchronization

10
推荐指数
1
解决办法
2199
查看次数

使用 UML 建模的过程编程

我想用 UML 建模来设计我的程序,但我的编程语言范式是程序化的,而不是面向对象的。我听到很多程序员说“UML 不仅适用于面向对象的编程”。这是真的?

那么,我应该从哪里开始呢?哪些图表将用于程序编程。请提及哪些 UML 图有帮助。

uml

8
推荐指数
1
解决办法
4866
查看次数

添加注销脚本

我有一些脚本,我希望每次用户注销时运行.我想创建一些以编程方式设置注销脚本的东西.例如,可以执行exe或cmd文件以将注销脚本添加到Windows执行的注销脚本列表中.因此,Windows API函数或Windows shell命令将更可取,但我找不到这样的函数或命令来帮助解决这个问题.

我检查了本地组策略编辑器在您使用它向组策略添加注销脚本时所做的注册表编辑,但是它确实做了很多我不能确定的模仿.例如,它进行了大量的注册表编辑,并且它在某些注册表项中使用数字代码,在某些值中使用二进制数据.我不知道这些值代表什么.

我已经尝试了GPEdit所做的更改的子集,希望这样做仍然可行.例如,我将对HKCU\Software\Policies\Microsoft\Windows\System\Scripts\Logoff所做的更改导出并导入到另一台PC上,但这不起作用,并且GPEdit MMC没有意识到我甚至已经制作了更改.

正如我所说,一组Windows API函数或Windows shell命令将是更好的,如果有人知道一些可能有帮助,但如果有人知道一种方法解码GPEdit以我可以模拟的方式制作的信息堆然后,只要它们稳定,我就不反对进行注册表更改.

无论我找到和使用什么解决方案,它都必须能够自动可靠,因为它将通过psexec远程执行到许多计算机上,并且它也将被包含在自动设置过程中,用于未来设置的PC.

不幸的是,对于谷歌而言,这似乎是一个难题,因为人们试图做的许多其他事情都有许多我要查询的关键词,但实际上并不是同一个主题.例如,关闭/注销挂钩用于运行应用程序或远程注销用户.

如果有人是Windows注册表或MMC向导,并且认为看到注册表的转储更改了GPEdit MMC在做同样的事情时会有所帮助那么就这么说了,我会让它可用,因为我已经捕获它.我怀疑这是要走的路,但我已经开始研究如何创建MMC管理单元工具; 我的想法是,也许GPEdit管理单元本身可以进行逆向工程,这样我就能以一种简单的方式看到它正在做什么.这不会快到任何地方,因为我看到的.adm文件中没有一个看起来有这样的设置,并且gpedit.msc文件似乎没有任何可以在明文部分中提供它的东西,尽管那里是一个看起来像胡言乱语的部分,所以也许那里有某种魔法.

windows winapi scheduled-tasks logoff windows-scripting

5
推荐指数
1
解决办法
1万
查看次数

会话僵尸源或API

我想制作一个可以进行简单对话的机器人.我希望能够为机器人提供有关它所知道的事物以及它如何响应某些主题的参数.我想知道是否有人知道任何免费的源代码或一个体面的会话机器人的API.

我想通过让计算机控制的角色与真实玩家交互而不需要完全预先编写脚本的静态对话来使用它来促进游戏.我希望我能找到能够举行简单通用对话的内容,除非询问特定主题,此时它可以对预先设定的特定主题列表给出具体回复.

我要求更多关于会话处理方面的内容,而不是关于前端或其他应用程序或类似内容的钩子.最初,我将把它作为一个基于本地命令行的东西,然后如果满意我将libpurple作为一个API来访问各种通信网络,一旦我准备好对话框处理.

那么,有没有人知道任何这样的源代码或API?谷歌提供了大多数工具,如模仿.我不希望那里有很多.存在可以处理各种情感和主题的东西的源代码会很棒,但是我会对那些只进行最简单的对话的东西感到满意,因为应该有某些东西可以做到这一点,看看有没有存在多个IM机器人.

在缺乏良好的资源或API的情况下,是否有人碰巧知道有关编程可以进行对话的AI的任何好材料?再说一遍,我不是在谈论博士论文,讨论可以作为人类或类似的东西传递的机器人; 我的意思是讨论一些简单的编程技术的材料,常见的会话机器人用它来进行基本的对话.

由于libpurple API,我可能会在C++中这样做.所以C++资源是可取的,但不是必需的.

(编辑)我偶然发现了AIML(人工智能标记语言).我目前正在研究这个问题,听起来似乎很有希望,特别是如果有任何预先制作的会话资源可用,那么我可以按照我提到的方式添加主题,如果我理解的话正确.

artificial-intelligence bots

0
推荐指数
1
解决办法
2461
查看次数