线程中cout问题

wind00sky 2010-06-22 03:34:31
在线程中cout后就是不输出内容,endl flush都不管用,但printf就可以好奇怪,是因为cout是线程不安全的?

cout<<"COUT::###############point info########################"<<endl;
cout<<"COUT::Quantity:"<<pPointModel->Quantity<<endl;
cout<<"COUT::############point info over######################"<<endl;
fflush(stdout);

printf("PRINTF:###############point info########################\n");
printf("PRINTF:Quantity:%d\n", pPointModel->Quantity );
printf("PRINTF:############point info over######################\n");
...全文
204 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wind00sky 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 oyster2008 的回复:]

我以往采取的思路,一个线程单独用于输出日志,所有其它线程把日志消息放到一个循环缓冲区中,然后立即返回,日志线程则从缓冲区中取出日志消息一条一条的输出到日志文件中,就是有一个线程单独负责输出
引用 9 楼 wind00sky 的回复:

引用 7 楼 taodm 的回复:

那也应该用专门的log线程。

对了,那您的意思是说每当程序中需要记录信息,就直接启动一个log线程来记录,中……
[/Quote]

实在抱歉哪,刚没有看到你的回复,结分完后才看到你的回复,于是没有给上你分,真的是实在抱歉,但是你写的东西小弟实在感激,学到很多东西,谢谢了啊
liutengfeigo 2010-06-22
  • 打赏
  • 举报
回复
oyster2008 2010-06-22
  • 打赏
  • 举报
回复
我以往采取的思路,一个线程单独用于输出日志,所有其它线程把日志消息放到一个循环缓冲区中,然后立即返回,日志线程则从缓冲区中取出日志消息一条一条的输出到日志文件中,就是有一个线程单独负责输出
[Quote=引用 9 楼 wind00sky 的回复:]

引用 7 楼 taodm 的回复:

那也应该用专门的log线程。

对了,那您的意思是说每当程序中需要记录信息,就直接启动一个log线程来记录,中间加锁等来控制, 还是一直就一个log线程来记录,比如说往日志文件中写,麻烦你了
[/Quote]
wind00sky 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 taodm 的回复:]

这些细节,你有完全的判断力,自己根据自己已经掌握的设计原则决定一下就可以了。
[/Quote]
恩好的,受教了,谢谢
taodm 2010-06-22
  • 打赏
  • 举报
回复
这些细节,你有完全的判断力,自己根据自己已经掌握的设计原则决定一下就可以了。
wind00sky 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 taodm 的回复:]

那也应该用专门的log线程。
[/Quote]
对了,那您的意思是说每当程序中需要记录信息,就直接启动一个log线程来记录,中间加锁等来控制, 还是一直就一个log线程来记录,比如说往日志文件中写,麻烦你了
wdy0725 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 taodm 的回复:]

楼主MVC模式听说过没有?到处都有直接输出,本身是一个非常非常错误的设计了。
[/Quote]

能否说具体点?直接输出是指标准输出还是也包括直接输出到文件, 或是指直接调用标准库的输出函数?
taodm 2010-06-22
  • 打赏
  • 举报
回复
那也应该用专门的log线程。
wind00sky 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 taodm 的回复:]

楼主MVC模式听说过没有?到处都有直接输出,本身是一个非常非常错误的设计了。
[/Quote]
恩,你说的很正确,但是我有时候需要在程序里面要测试一些数据,看一下程序运行状态,开发环境的时候我感觉也有点必要,产品的时候肯定就不会有太多的直接输出了
taodm 2010-06-22
  • 打赏
  • 举报
回复
楼主MVC模式听说过没有?到处都有直接输出,本身是一个非常非常错误的设计了。
wind00sky 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 pengzhixi 的回复:]

在使用cout<<的地方使用临界区吧。cout确实不是线程安全的。
[/Quote]
那崩溃了,在线程中还不能使用cout了,只能用printf了,这真不爽。呵呵。
wind_breez 2010-06-22
  • 打赏
  • 举报
回复
是因为COUT是一个全局对象?
pengzhixi 2010-06-22
  • 打赏
  • 举报
回复
在使用cout<<的地方使用临界区吧。cout确实不是线程安全的。
wind00sky 2010-06-22
  • 打赏
  • 举报
回复
上面程序中,下面printf全部都输出了,但cout就是不输出。

64,648

社区成员

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

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