C++ コンパイルされたプログラムをバックグラウンドで実行し、必要に応じて入力を送信します。

C++ コンパイルされたプログラムをバックグラウンドで実行し、必要に応じて入力を送信します。

次の構造を持つUNIX環境用にC ++で書かれたコンパイルされたプログラムがあります。

int main(){
...
LoadEngine()
...
while(1){
    std::cin >> buffer;
    ...
    ExecuteFunction(buffer);
}
}

エンジンのロードにはかなり時間がかかるため、まずバックグラウンドでプログラムを起動してから、必要に応じて入力を送信してみました。

最後に標準のアンパサンドを追加してプログラムを実行すると、プログラムはバックグラウンドで実行されているように見えず、代わりに停止します。標準::神コンソールから入力を受け取るまで、コンソールから入力を受信して​​停止します。

プログラムがバックグラウンドで継続的に実行され、入力を受け取り、必要に応じて機能を実行させるにはどうすればよいですか。

編集する:最終製品は、音声を認識し、認識された単語に基づいて特定の動作を実行できる小型デバイス(RaspberryPi)です。私のプログラムは、単語入力に基づいてタスクを実行するデバイスの一部であり、単語入力は変数に対応します。バッファー上記のコードスニペットから。

だから標準::神Partialは、バックグラウンドプロセスでエンジンをロードするために部分コードが開始され、設計されたすべての操作を実行するかどうかをテストするために使用されるダミーコード行です。

編集2:達成する目標を明確にするために、プログラムは音声認識装置から入力を受け取り、それを実行します(たとえば、入力から音声を合成し、LEDに信号を送信するなど)。テキスト入力は、コンソール(私のコードが現在これを行っている)から直接インポートするか、私が理解していない他の方法でインポートできます。入力が従う唯一のポイントはでなければならないテキストであり、他の音声認識プログラム(他の開発者が処理しました)から送信されました。したがって、具体的な方法は明記されていません。私が心配する必要があるのは、テキスト入力で関数を実行するプログラムです(例:バッファーコードスニペットから)。したがって、一般的な構造は次のようになります。

Int main(){
LoadEngine()
while(1){
    buffer = ReceiveInput();
    ExecuteFunction(buffer);
 }}

どこ入力()を受け取りますそのうちのいくつかは現在、次のように実装されています。標準::神。実際、どのような方法でも最初にエンジンを一度だけロードすればプログラムを実行できる。機能の実行入力からデバイス終了まで。

答え1

そうは思えません。この場合、通常はネットワークポートを受信し、接続を受け入れ()してデータを読み取り、必要な操作を実行します。その後、データを送信するにはクライアントアプリケーションも必要です。これは通常、バックグラウンドアプリケーションがどのように機能するかです。

答え2

厄介で不便ですが、おそらく他の答えよりも少なくなります。

プログラムが入力を要求するたびに:

  1. シェルプロンプトを入力します - プログラムを起動するシェルを意味します。 (つまり、前景で単に「エンジン」プログラムを実行していないという事実は、ファイルの編集などの他のタスクを実行するために端末を使用していることを示します。プログラムが入力を要求するたびにエディタを保存して終了し、デフォルトのシェルに戻るか、エディタを一時停止することができますが、これにより次の手順がより複雑になります。
  2. fgもちろん、と入力すると、バックグラウンドEnterジョブが前景として表示されます。上記のように複数のバックグラウンドタスクがある場合は、「エンジン」プログラムをフォアグラウンドにインポートするために実行する必要があるタスクを実行してください。
  3. プログラムと対話します。
  4. しばらく実行(計算など)を再開する準備ができたら、Ctrl+を押してZからbg (次へEnter)を押します。

プログラムの実行中に繰り返します。

答え3

入力を受け取るタイミングと、入力を期待する場所を知るために、アプリケーションにウェイクアップ呼び出しを送信する必要があります。これはバックグラウンドで実行すると端末プロセスから分離されるためです。より良い解決策は、(IMHO)エンジンへのインターフェースとして別々のプログラムを作成することです。エンジンが問題のように見えるからです。実行時にエンジンに入力を送信する単純なスクリプトと通信して作成する関数のセットを提供します。エンジンはバックグラウンドで実行され、他のプログラムはエンジンに直接接続されます。これが私が現在考えることができる最善の解決策です。

関連情報