小编srs*_*sns的帖子

更快的替代windows.h的Beep()

我正在做个人项目.我想用旧火腿收音机通过空中传输一些数据.

我的第一个草案申请就是这样的:

我用4"信号"构造一个字节:

  • 5000hz表示"00"

  • 6khz的意思是"01"

  • 7khz的意思是"10"

  • 8khz的意思是"11"

  • 9khz与前一个相同

然后我将这4个位合并在一起并重新开始下一个位.

解调效果很好,应该足够快,但我的声音产生问题......它很慢......

这是我的调试代码:

#include <iostream>
#include <windows.h>

using namespace std;

int main()
{
Beep( 5000, 100 );
Beep( 6000, 100 );
Beep( 7000, 100 );
Beep( 8000, 100 );
Beep( 9000, 100 );
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我期待5次哔哔声,靠近在一起,每次100毫秒,但这是我得到的(在顶部,五个"100ms哔哔声()",在底部,五个"20ms哔哔声()": 一个

正如你所看到的,我得到的是50ms的哔哔声,然后75ms暂停,当我想要100ms的哔哔声,10ms的哔哔声,接着是100ms的暂停,当我想要20ms的哔哔声时.

对于Windows,有比Beep()更快更准确的东西吗?(适用于Linux的东西会更好,因为最终的应用程序应该在覆盆子pi上工作)

我会用3ms的声音获得更高的可用带宽(...... 41字节/秒......这对我的应用来说已经足够了)

编译器:g ++(mingw)

Os:七个64位

c++ windows beep

7
推荐指数
1
解决办法
3044
查看次数

如何从主类外部的嵌套类中编写实际代码

我想通过在主类之外编写嵌套类的实际代码来保持代码的可读性,是否可行,以及如何实现?

class AA{
   //random code

   class BB : public CC <double> {
      // very long code
   };

   // random code
};
Run Code Online (Sandbox Code Playgroud)

我想写一些类似的东西:

class AA{
  //random code
  //<declaration of class BB>
  // random code
};

class BB : public CC <double>{
  // very long code
};
Run Code Online (Sandbox Code Playgroud)

BB级只能在AA级内进行...

c++ nested class

5
推荐指数
1
解决办法
2133
查看次数

使用管道执行命令并在c ++中执行超时(并读取stdout)

我需要你的帮助 !

我做了一个报告deamon(用c ++),需要在服务器上定期执行一堆命令.

一个简单的示例命令是:"/ bin/ps aux |/usr/bin/wc -l"

第一个想法是使用popen()分叉运行命令的子进程,并在父进程中设置一个alarm(),如果命令尚未退出,则在5秒后终止该子进程.

我尝试使用"sleep 20000"作为命令,子进程被杀死但是sleep命令仍在运行...不好.

第二个想法是使用execlp()而不是popen(),它使用简单的命令(即没有管道),如"ls -lisa"或"sleep 20000".我可以得到结果,如果5秒后没有完成,则会杀死进程.

现在我需要执行"/ bin/ps aux |/usr/bin/wc -l"命令,显然它不能直接使用execlp(),所以我尝试了"hack":

execlp("sh","sh","-c","/bin/ps aux | /usr/bin/wc -l",NULL);
Run Code Online (Sandbox Code Playgroud)

我工作......或者说我想...我试过了

execlp("sh","sh","-c","sleep 20000",NULL); 
Run Code Online (Sandbox Code Playgroud)

只是为了确定并且子进程在5秒后被终止(我的超时)但是sleep命令就在那里...

我愿意接受建议(我会讨价还价)!

提前致谢 !

TLDR;

我需要一种方法:

  • 执行"复杂"命令,例如"/ bin/ps aux |/usr/bin/wc -l"
  • 得到它的输出
  • 如果它需要超过5秒,请确保它被杀死(ps命令只是示例,实际命令可能永远挂起)

c++ command timeout pipe exec

3
推荐指数
1
解决办法
2784
查看次数

标签 统计

c++ ×3

beep ×1

class ×1

command ×1

exec ×1

nested ×1

pipe ×1

timeout ×1

windows ×1