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別々ので同じスクリプトを起動するとTerminal.app、正しく機能します(2つのウィンドウがあり、それらはブロックされていません)。プログラムを使用してそれを達成するにはどうすればよいですか?重要な場合に備えて、64ビットのMac OSX10.8とXCodeを使用しています。

アップデート:

を削除すると、が呼び出されfclose(pipe);たときに2つのウィンドウが表示されることを発見しましたが、そのうちの1つはまだ「ブロック」されています。obj1.plot(); obj2.plot();

4

1 に答える 1

1

これはgnuplotの制限です。一度に開くことができるインタラクティブプロットは1つだけです(私が知る限り、、、、 ...でも同じ動作が存在しx11ますaquaterm)。2つのインタラクティブなプロットを同時に作成する場合は、必要なpopenインタラクティブなプロットごとにgnuplotプロセスを(経由で)生成する必要があります。

于 2012-10-22T12:04:41.757 に答える