线程评级:
  • 0票(s) - 0平均
  • 1
  • 2
  • 3.
  • 4
  • 5
插件API的线程安全性
# 1
我目前正在为RoboDK (c++, Qt)开发一个插件,它使用内部RoboDK API。将一些昂贵的计算任务卸载到单独的线程中是很好的。然而,似乎API本身不是线程安全的,至少一些方法调用崩溃,如果从另一个线程而不是主/GUI线程调用。是否有任何可用的文档,哪些API的方法是线程安全的,可以安全地从其他线程调用?或者不应该在不同的线程中使用API ?

致以最诚挚的问候,迈克尔
# 2
好问题……理论上,通过插件接口(c++, Qt)的RoboDK API不支持多线程。但是,您应该能够使用插件接口的一些功能而不会出现问题。

例如,您应该对SolveFK没有问题,另一方面,SolveIK可能会出现问题。我们可以使其他函数线程安全。

如果你能告诉我们更多你需要加快的细节,我们也许能更好地帮助你。
# 3
我在一个空间站和一个程序中添加了大量的目标,所以我认为这些操作不能从不同的线程中完成。

这并不是什么大问题,更像是UI在加载目标时变得无反应。我已经使用QApplication::processEvents();定期调用,以便至少有一个进度条不时得到更新。我只是在想是否有另一种(更好的?)方法来做到这一点,这种方法甚至可能允许将来并行化程序生成。但是目前单线程性能仍然足够好(在程序中隐藏指令和目标等优化已经应用)。
# 4
添加一个新目标将引发一个渲染事件,这可能会很慢。而且,这个操作应该是单线程的。

然而,一个解决办法来加快事情是阻止渲染事件,而你做了很多操作:
代码:
RDK。命令(“渲染”,“0”);//关闭3D视图渲染

/ /……添加目标、项目和/或其他操作

RDK。命令(“渲染”,“1”);//打开3D视图渲染(不触发渲染事件)
RDK.Render ();//更新3D视图(触发渲染事件并显示更新后的场景)
这没有适当的文档,但应该工作良好。只要确保激活渲染,否则3D视图将不会显示任何东西。




浏览此主题的用户:
1客人(年代)