多线程中的 iostream
在主线程中启动了其他一些线程之后进入了如下的循环:
while(1)
{
std::getline(std::cin, cmd);
.......
}
现在其他某个线程中出现了某种状态,需要退出循环,于是使用了 exit(-1)。可是这时程序并没有退出,需要按一下回车才能退出。
请教各位高手如何能够不按回车在 exit 之后立即退出?
已经尝试过在 exit 之前加入如下代码,均无效:
std::cin.putback( '\n ');
std::cin.setstate(std::ios::eofbit);
[解决办法]
楼主如果是在 Windows 平台可以尝试使用 TerminateProcess 函数:
#include <iostream>
#include <string>
#include <process.h>
#include <Windows.h>
using namespace std;
void * stk(void * arg)
{
for(int i=0; i < 4; i++)
{
Sleep(1000);
printf( "=============%d \n ", i);
}
TerminateProcess(GetCurrentProcess(), 0);
exit(-1);
return 0;
}
int main()
{
string cmd;
unsigned int id;
_beginthreadex(0, 0, (unsigned int (__stdcall*)(void*))stk, 0, 0, &id);
while(1)
{
std::getline(std::cin, cmd);
cout < <cmd < <endl;
}
}
[解决办法]
或者, 还有另一个方法.
_exit(-1);
_exit立即进入内核, e x i t则先执行一些清除处理
(包括调用执行各终止处理程序,关闭所有标准I / O流等),然后进入内核 .
所以调用 _exit 可以直接退出, 而 exit 不行.
[解决办法]
当然不安全, 不过, 既然进程已经强制退出,
其所使用的资源也就释放了, 也没什么关系,
不会对系统产生什么不良影响吧!
[解决办法]
如此强制退出,
隐藏的问题自然会有,
但是只要在你的使用条件下能正常工作就足够了~~