C++ 为什么要冻结线程?
我想知道为什么循环中的kbhit不允许线程工作,在下面的代码中必须有一个到屏幕测试的输出!,但事实并非如此。为什么?C++ 为什么要冻结线程?,c++,multithreading,visual-studio-2012,C++,Multithreading,Visual Studio 2012,我想知道为什么循环中的kbhit不允许线程工作,在下面的代码中必须有一个到屏幕测试的输出!,但事实并非如此。为什么? #include <iostream> #include <process.h> #include <conio.h> using namespace std; void Thread(void *par) { while (true) { cout<<"Test!"<
#include <iostream>
#include <process.h>
#include <conio.h>
using namespace std;
void Thread(void *par)
{
while (true)
{
cout<<"Test!"<<endl;
};
}
int main(int argc, char* argv[])
{
_beginthread( Thread, 0, NULL);
while(!_kbhit());
return 0;
}
无论是KBHIT还是One NeXthType都是C++标准的一部分,两者之间的交互作用不明确。据我们所知,所有的线程可能会被阻塞,直到一个键被击中。这个程序对我来说是有效的。垃圾邮件测试!一遍又一遍直到我按下一把钥匙。你使用什么环境?是的,你说得对,我使用Windows 8和Visual Studio 2012,当我用ctrl+f5运行这个程序时,它不会打印,如果我运行调试版本的exe文件,它会运行顺利。奇怪。@WanderingLogic:根据C++11草案N3376的§27.7.3.8[ostream.manip]^1,endl调用os.putos.gaveled'\n',然后是os.flush,因此endl隐式调用flush;不需要手动操作。