1

我有一个 C++ 程序,其中包含一个使用的类plot()方法gnuplot

FILE* pipe = popen("/sw/bin/gnuplot -persist","w");
if (pipe != NULL){
    gnuPlotCommand = "load " + scriptFileName + "\n";
    fprintf(pipe, gnuPlotCommand.c_str());
 }
else { ... }
fclose(pipe);

脚本文件本身将终端设置为wxt并加载数据文件。当我第一次运行程序调用obj1.plot()时,会出现一个带有绘图的窗口。如果我然后运行程序调用obj2.plot()(不关闭第一个窗口),则会出现另一个窗口,但两个窗口都“被阻塞”(我无法旋转绘图并且无法关闭窗口)。如果我成功了

obj1.plot();
obj2.plot();

只出现一个绘图窗口。

当我gnuplot在单独的 's 中启动相同的脚本时Terminal.app,它可以正常工作(有两个窗口并且它们没有被阻止)。如何使用我的程序实现它?我有 64 位 Mac OS X 10.8 和 XCode 以防万一。

更新:

我发现删除会在调用fclose(pipe);时出现两个窗口obj1.plot(); obj2.plot();,但其中一个仍然被“阻止”。

4

1 回答 1

1

这是 gnuplot 中的一个限制。它一次只能打开 1 个交互式绘图(据我所知,与x11, aquaterm, ... 存在相同的行为)。如果您想同时拥有 2 个交互式绘图,则需要为popen您想要的每个交互式绘图生成一个 gnuplot 进程(通过)。

于 2012-10-22T12:04:41.757 回答