yyzybb537 / libgo

Go-style concurrency in C++11
MIT License
3.18k stars 754 forks source link

发现一个while true循环的问题 #271

Closed yangqun closed 2 years ago

yangqun commented 2 years ago

就是在class里面写一个死循环间隔几秒写一下日志,如果程序运行一段时间(几个小时)就会刷出很多的log,不是间隔几秒,而是不断的在写。 image

yangqun commented 2 years ago

image

yangqun commented 2 years ago

我是把协程当成线程用了。换成c++的标准线程就没问题。

osabc commented 2 years ago

sleep 是线程,co_sleep 用于协程

yangqun commented 2 years ago

sleep 是线程,co_sleep 用于协程

哦 ,好的 我改一下试试。谢谢指导。

yangqun commented 2 years ago

sleep 是线程,co_sleep 用于协程

换成co_sleep也是这样,运行一段时间就突然爆发刷出很多高频率的日志。没有按照预期那样每隔几秒输出一条。

image
Wkh3 commented 2 years ago

libgo的timer有bug,运行一段时间后会不断产生事件,可以尝试fix一下

mage-game commented 2 years ago

这个库没人维护了吗

gswgit commented 2 years ago

死循环中使用co_sleep(1)确实有问题,我也遇到了同样的问题。 一开始我认为co_sleep存在问题,之后尝试了使用
boost::asio::steady_timer tm(gv.g_io); tm.expires_after(std::chrono::minutes(1)); tm.wait(); 来代替co_sleep(1),结果仍存在问题。 后来使用co_chan类型的TimePop方法,仍然存在问题。

最后直接不用了

yyzybb537 commented 2 years ago

master分支的新版本修复了这个问题

SignalEmit commented 4 months ago

@yangqun 楼主这个问题解决了吗?matser的bug多的一逼,不敢用了

paradiseforgithub commented 4 months ago

已收到您的邮件,如有问题会尽快给您回复.