多线程中的 iostream

www_adintr_com 2007-01-06 07:08:18
在主线程中启动了其他一些线程之后进入了如下的循环:

while(1)
{
std::getline(std::cin, cmd);
.......
}

现在其他某个线程中出现了某种状态,需要退出循环,于是使用了 exit(-1)。可是这时程序并没有退出,需要按一下回车才能退出。
请教各位高手如何能够不按回车在 exit 之后立即退出?

已经尝试过在 exit 之前加入如下代码,均无效:

std::cin.putback('\n');
std::cin.setstate(std::ios::eofbit);
...全文
392 点赞 收藏 8
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sirguan 2007-01-10
_exit,长见识了
回复
www_adintr_com 2007-01-09
这样是否会不安全?
回复
www_adintr_com 2007-01-09
没有办法在另外一个线程中改变 io 状态,让 getline 返回,可以自然安全的退出么?
回复
chib 2007-01-09
回复
jixingzhong 2007-01-09
如此强制退出,
隐藏的问题自然会有,
但是只要在你的使用条件下能正常工作就足够了~~
回复
pottichu 2007-01-09
当然不安全, 不过, 既然进程已经强制退出,
其所使用的资源也就释放了, 也没什么关系,
不会对系统产生什么不良影响吧!
回复
pottichu 2007-01-08
或者, 还有另一个方法.

_exit(-1);

_exit立即进入内核, e x i t则先执行一些清除处理
(包括调用执行各终止处理程序,关闭所有标准I / O流等),然后进入内核 .

所以调用 _exit 可以直接退出, 而 exit 不行.
回复
pottichu 2007-01-07
楼主如果是在 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;
}
}

回复
相关推荐
发帖
C++ 语言
创建于2007-09-28

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2007-01-06 07:08
社区公告
暂无公告