运行需要输入而不挂起的命令,但仍允许输入 我在C++嵌入式平台上制作了一个基本的音乐播放器(英特尔爱迪生)。p>

运行需要输入而不挂起的命令,但仍允许输入 我在C++嵌入式平台上制作了一个基本的音乐播放器(英特尔爱迪生)。p>,c++,linux,multithreading,media-player,intel-edison,C++,Linux,Multithreading,Media Player,Intel Edison,它的工作原理是使用mpg123向shell发送播放音乐的命令 播放音乐很好,但现在我需要添加媒体控件。我正在使用mpg123命令来播放我的MP3文件,如果您将-C标志传递给它,则它会侦听命令,例如p用于暂停,q用于退出等 我正在使用另一个的代码,所以请回答执行命令的问题 现在,当我运行命令来播放C++中的歌曲(例如,代码> MPG123-C/Media/SDCAR/MUSI/)时,它挂起C++程序,直到命令返回,直到歌曲播放完毕,才会返回。我可以通过使用pthead在并行线程中运行命令来消除这个

它的工作原理是使用
mpg123
向shell发送播放音乐的命令

播放音乐很好,但现在我需要添加媒体控件。我正在使用
mpg123
命令来播放我的MP3文件,如果您将
-C
标志传递给它,则它会侦听命令,例如
p
用于暂停,
q
用于退出等

我正在使用另一个的代码,所以请回答执行命令的问题

现在,当我运行命令来播放C++中的歌曲(例如,代码> MPG123-C/Media/SDCAR/MUSI/<代码>)时,它挂起C++程序,直到命令返回,直到歌曲播放完毕,才会返回。我可以通过使用
pthead
在并行线程中运行命令来消除这个问题,但这仍然不允许我按需要输入命令

我想可能是在另一个
tty
中运行命令,然后通过将命令发送到另一个
tty
来将命令传递给
mpg123
,但我找不到这样做的方法。(我不确定这是否可行)

我已经尝试了几个小时,所以现在我准备在这里寻求帮助:)


对于如何在不冻结线程的情况下运行命令(在pthread或其他任何程序中),并且仍然能够将命令发送到
mpg123
,你们有什么想法吗

听起来您需要使用mpg123的FIFO模式。设置要使用的路径名,将mpg123指向它,然后将命令回显到其中

这是一个很好的例子

FIFO_MPG='/srv/http/newsctl'
mpg123 -R --fifo "$FIFO_MPG"
echo 'load filename.mp3' >> "$FIFO_MPG"

听起来您可能想使用mpg123的FIFO模式。设置要使用的路径名,将mpg123指向它,然后将命令回显到其中

这是一个很好的例子

FIFO_MPG='/srv/http/newsctl'
mpg123 -R --fifo "$FIFO_MPG"
echo 'load filename.mp3' >> "$FIFO_MPG"

因此,您基本上希望
P
表示mp3播放器的“暂停”,同时
ls-l Private
Private
目录中列出您的文件,而
P
表示
Private
表示“暂停”?对我来说,听起来很不可能。但是,可以使用管道或伪终端将内容从一个进程发送到另一个进程。“除了不可能的事情之外,最有意义的事情实际上取决于你想要实现什么,也就是说,”彼得森不太清楚你在说什么。在我使用
-C
标志运行
mpg123
之后,它会侦听用于命令的输入字符,例如用于暂停的
p
。我需要找到一种方法来防止命令执行冻结线程,但仍然能够将我的媒体控件的输入字符发送给它。您基本上希望
P
表示mp3播放器的“暂停”,同时
ls-l Private
Private
目录中列出您的文件,没有
P
for
Private
的意思是“暂停”?对我来说,听起来很不可能。但是,可以使用管道或伪终端将内容从一个进程发送到另一个进程。“除了不可能的事情之外,最有意义的事情实际上取决于你想要实现什么,也就是说,”彼得森不太清楚你在说什么。在我使用
-C
标志运行
mpg123
之后,它会侦听用于命令的输入字符,例如用于暂停的
p
。我需要找到一种方法来防止命令执行冻结线程,但仍然能够向它发送媒体控件的输入字符