2014-06-14 207 views
0

我正在尋找一種方法來從我的C++程序中調用特定的命令行調用。這個命令需要被稱爲多次異步。然後從用戶輸入中取消。C++ linux從程序執行命令行

程序流程如下:

  • 啓動方案等待用戶推某個按鈕。
  • 按下時,需要發出命令。

    bmdcapture -C 0 -m 2 -F nut -m 11 -V 3 -A 2 -f pipe:1 | avconv -y -i - -strict experimental -q:v 1 -c:v mpeg4 '/var/www/recvideos/mytest0.mp4' 
    
  • 然後等待用戶按下相同的按鈕並終止上述命令。

我有按鈕按下的邏輯,但無法找到一種方法來執行命令,而無需它接管程序。我已經看過叉(),但我不確定它會使用按鈕按下邏輯。

任何幫助,將不勝感激

這裏是按鍵守望在這篇文章的時候,我與並行線程玩。

while(1) 
{ 
if (kbhit()) { 
    int keypressed = getch(); 
    //printw("End Capture Key pressed! It was: %d\n", keypressed); 
    printw("Capture will begin again when ctrl+r is pressed. \n"); 
    if(keypressed == 18) 
    { 
     //exit capture logic here 
     int j; 
     for(j=0; j < 1; j++) 
     { 
      pthread_cancel(threads[j]); 
     } 
     captureActive = false; 
     break; 
    } 
} 
else if(!captureActive) 
{ 
    printw("Starting Capture...\n"); 
    //Begin Capture on all active cards 
    int rc; 
    int i; 
    for(i=0; i < 1; i++) 
    { 
     rc = pthread_create(&threads[i], NULL, Capture, (void*)&threads[i]); 

     if(rc) 
     { 
      cout << "ERROR: unable to create thread: " << rc << endl; 
      exit(-1); 
     } 
    } 

    captureActive = true; 
} 
else { 
    //printw("capturing...\n"); 
    refresh(); 
    usleep(1000000); 
} 
} 

回答

2

如果追加&符號添加到您的命令,然後使用system()執行你的命令,那麼你的程序將繼續運行,而你的命令在後臺同時運行。例如:

sprint(cmd, "/path/to/your/command &"); 
system(cmd); 
+0

好的,所以該對話的擴展將是如何在用戶交互中終止執行該命令? – user3740847

+0

有幾種方法可以完成。一種方法是使用信號。如果用戶在後臺運行命令時仍然與主程序進行交互,並且用戶按下某個鍵以指示該命令應該停止,那麼主程序可以向該命令發送一個信號,告訴它停止。你可以提供一個這樣的例子嗎? – mti2935

+0

。 – user3740847