R tcltk响应gui在计算期间

时间:2016-04-04 14:39:22

标签: r multithreading user-interface tcl tk

Hello亲爱的堆栈溢出社区。

我目前正致力于R项目的统计计算,涉及gui和耗时的启发式算法。在gui中应该是一个启动和停止计算的按钮,以及一个报告迄今为止最佳错误的文本字段。

所以我坚持在计算过程中如何保持gui响应的问题。

一些示例代码

Laravel
在do stuff函数中,一些多线程的东西似乎是必要的。它需要在Windows和Linux上工作。我希望有关如何存档的想法。提前谢谢

1 个答案:

答案 0 :(得分:0)

我认为最简单的方法是使用带有system参数的system2wait=FALSE启动R脚本作为后台进程,以便在后台处理长时间运行的计算。 / p>

如果要更新UI以显示中间结果或进度,R脚本必须将当前状态写入" exchange"可用于更新UI的文件。

要更新UI,您必须定期检查新状态e。 G。通过使用Tcl / Tk的after命令,请参阅:

http://www.tcl.tk/man/tcl/TclCmd/after.htm

有关启动R脚本作为后台进程的示例,请参见此处:

http://stackoverflow.com/questions/14208976/r-run-source-in-background

请注意,R是单线程的,并且必须从创建UI的同一线程(进程)更新Tk-UI,因为主事件循环在这里运行。

另外请注意,当后台任务正在运行时,您不应允许用户通过UI进行相互冲突的更改(例如,启动另一个后台任务 - 除非您想支持此操作)。

通过使用另一个"信号文件"可以最好地通过用户界面取消后台进程("取消按钮")。由后台进程定期检查。