多线程中的 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);
...全文
440 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
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;
}
}

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧