首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2012-02-28 
多线程中的 iostream在主线程中启动了其他一些线程之后进入了如下的循环:while(1){std::getline(std::cin,

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

热点排行