我正在嵌入式Linux平臺(Intel Edison)上用C++製作基本音樂播放器。運行需要輸入而不掛起的命令,但仍允許輸入
它通過發送命令到外殼使用mpg123
來播放音樂。
播放音樂工作正常,但現在我需要添加媒體控件。我使用的是mpg123
命令來播放我的MP3文件,如果你通過它的-C
標誌,那麼它偵聽如p
的暫停,q
表示退出等
命令我使用的代碼從這個其他SO回答執行How to execute a command and get output of command within C++ using POSIX?
現在的事情是,當我運行該命令從C播放選定的歌曲++(例如,mpg123 -C /media/sdcard/Music/<songname>
),它掛的C++程序的命令,直到該命令返回,不返回,直到歌曲已完成播放。我可以通過使用pthead
在並行線程中運行該命令來消除該問題,但仍然不允許我根據需要輸入命令。
我想也許以某種方式在另一個tty
運行命令,然後以某種方式將命令傳遞給mpg123
發送到其他tty
,但我無法找到一種方法來做到這一點。 (我不知道它的possable)
我一直在努力了幾個小時做這個,所以現在我已經準備好要問這裏的一些幫助:)
做任何你有什麼想法關於如何在不凍結線程的情況下運行命令(以pthread或其他方式),並且仍然能夠發送命令到mpg123
?
所以,你基本上要'P'表示「暫停」你的MP3播放器,和'ls -l命令Private'列出在'Private'文件目錄,同時,沒有'P'代表'Private'意思是「暫停」?聽起來對我來說是不可能的。但是,是的,您可以使用管道或僞終端將事物從一個流程發送到另一個流程。哪個最有意義取決於你想要達到的目標 - 除了不可能之外,就是這樣。 –
@MatsPetersson不太清楚你在那裏說什麼。在運行具有'-C'標誌的'mpg123'後,它監聽用於命令的輸入字符,例如'p'用於暫停。我需要找到一種方法來防止凍結線程的命令執行,但仍然可以將它發送給我的媒體控件的輸入字符 –