Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 程序在图形shell中比在命令shell中工作得更快_C++_Linux_Bash_Shell_Raspberry Pi - Fatal编程技术网

C++ 程序在图形shell中比在命令shell中工作得更快

C++ 程序在图形shell中比在命令shell中工作得更快,c++,linux,bash,shell,raspberry-pi,C++,Linux,Bash,Shell,Raspberry Pi,我使用的是一个树莓Pi模型B,带有树莓和内核3.18。 我所做的只是通过一个循环进行执行计算 循环函数如下所示 for(;;) { Timer.get_dt(); ...some print stuff... } 而Timer.get_dt是: 当我从命令shell运行代码时,我得到的循环运行频率为300-350 Hz。当我打开startx,打开一个图形外壳,打开一个终端,然后从那里运行代码时,我得到的频率是原来的数百倍,这似乎更可信 是什么原因导致命令shell运行程序如此缓慢

我使用的是一个树莓Pi模型B,带有树莓和内核3.18。 我所做的只是通过一个循环进行执行计算

循环函数如下所示

for(;;) {
   Timer.get_dt();
   ...some print stuff...
}
而Timer.get_dt是:

当我从命令shell运行代码时,我得到的循环运行频率为300-350 Hz。当我打开startx,打开一个图形外壳,打开一个终端,然后从那里运行代码时,我得到的频率是原来的数百倍,这似乎更可信


是什么原因导致命令shell运行程序如此缓慢

这取决于您是通过ssh还是通过将物理屏幕设备插入主板来使用命令shell

一些虚拟控制台有波特率限制;因此,内核可能会尝试模仿一些较慢的终端,包括其速度。虚拟控制台和任何其他tty-s传统上都很慢

您可以使用stty来理解和修改虚拟控制台中的终端设置


顺便说一句,如果您将stdout和/或stderr输出重定向到某个文件,您的程序可能会运行得更快。

这取决于您是通过ssh使用命令shell还是通过将物理屏幕设备插入主板

一些虚拟控制台有波特率限制;因此,内核可能会尝试模仿一些较慢的终端,包括其速度。虚拟控制台和任何其他tty-s传统上都很慢

您可以使用stty来理解和修改虚拟控制台中的终端设置


顺便说一句,如果您将stdout和/或stderr输出重定向到某个文件,您的程序可能会运行得更快。

到终端(Linux本机终端或X Window终端仿真器)的输出通常都很慢。它还取决于其他因素,如是否通过网络连接、内部缓冲和终端模式以及许多其他因素。要真正了解输出的速度,我建议您尝试检查无缓冲打印(用于标准输出的默认行缓冲)和完全缓冲打印。输出到终端,无论是Linux本机终端还是X窗口终端仿真器,传统上都很慢。它还取决于其他因素,如是否通过网络连接、内部缓冲和终端模式,以及许多其他因素。要真正了解输出的实际速度,我建议您尝试检查无缓冲打印(stdout使用的默认行缓冲)和完全缓冲打印。
oldtime_ = time_;
clock_gettime(CLOCK_MONOTONIC, &time_);
Timer.dt = ((static_cast<int64_t>(time_.tv_sec) * 1000000000 + static_cast<int64_t>(time_.tv_nsec)) - (static_cast<int64_t>(oldtime_.tv_sec) * 1000000000 + static_cast<int64_t>(oldtime_.tv_nsec))) / 1000000000.0;