读书人

多线程中的 iostream,该如何解决

发布时间: 2012-02-28 13:06:36 作者: rapoo

多线程中的 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 不行.
[解决办法]
当然不安全, 不过, 既然进程已经强制退出,
其所使用的资源也就释放了, 也没什么关系,
不会对系统产生什么不良影响吧!
[解决办法]
如此强制退出,
隐藏的问题自然会有,
但是只要在你的使用条件下能正常工作就足够了~~

读书人网 >C++

热点推荐