3

私は状況を説明しようとします:

  • C++ と QT で記述された QT アプリケーションがあります。

  • この QT アプリケーションは、バックグラウンドで実行される別のコンソール C++ アプリケーションを開始します。

  • これら 2 つはおそらくソケットを使用して通信しますが、まだわかりません。

  • コンソール C++ アプリケーションは、私の gnuradio Python スクリプトを開始および停止する必要があります。また、パラメータを送信する必要があります。

  • 起動すると、この gnuradio スクリプトは独立して無限ループで実行され、おそらくソケットを使用してコンソールまたは QT アプリケーションに情報を送信します。

  • 私のコンソール アプリケーションは、QT アプリケーションによって命令が与えられたときに、この gnuradio スクリプトの実行を停止する必要があります。

問題は、この別の python スクリプトを C++ コンソール アプリケーションから停止するにはどうすればよいかということです。また、これをより簡単にするためにできることはありますか?

よろしく、

スピッツ

4

3 に答える 3

2

ソケット、またはすべてフリーデスクトップにしたい場合は、 DBUS pythonおよびDBUS c++を使用できます:D

于 2010-01-11T09:14:55.623 に答える
2

fork() と execv() を使用して、Python スクリプトを新しいプロセスとして生成します。execv() (または exec ファミリーの他の関数) を使用すると、Python スクリプトに引数を渡すことができます。Python スクリプトの使用が終了したら、子プロセス ID を使用して kill シグナルを送信します。

于 2010-01-11T09:16:06.167 に答える
0

C++ プログラムについては、こちらを参照してください。

http://www.codeproject.com/KB/cpp/kill_process.aspx

これにより、外部プロセスを作成および強制終了するための基本的なコードが提供されます。Python スクリプトを起動するということは、Python ビンを呼び出してスクリプトを最初の引数として与えることを意味することに注意してください。

C++ アプリと Python スクリプト間の通信は、名前付きパイプを介して行うことができます

http://en.wikipedia.org/wiki/Named_pipe

しかし、DBUSも機能します。

私のアドバイスは:

1) QT の良さを利用して、QT アプリから C++ アプリを起動します。これら2つは標準のI / Oリダイレクトを介して通信できます(実際に何をしたいかによって異なります)

2) 上記の例に従って、C++ から Python スクリプトを開始します。そして、これら 2 つは DBUS/Socket/Pipes を介して通信します。

トリックを行う必要があります

于 2010-01-11T11:09:01.277 に答える