gpt4 book ai didi

c++ - 定时一次标志

转载 作者:行者123 更新时间:2023-11-30 05:15:11 31 4
gpt4 key购买 nike

我在 this 中看到answer 我们可以使用std::once_flag 来调用一段代码一次:

std::once_flag onceFlag;

{
....
std::call_once ( onceFlag, [ ]{ /* my code body here runs only once */ } );
....
}

标准中是否有类似timed_once_flag 的东西,它会在一段时间后重置,以便再次调用这段代码?

timed_once_flag timedOnceFlag(5s);

{
....
std::call_once ( timed_once_flag, [ ]{ /* called again after timeout */ } );
....
}

我对此进行了搜索,但可能我没有使用足够的搜索词。

编辑:

为什么我需要这个:在我的例子中,我有多个线程可以向用户显示一个消息框,所以如果发生错误,它通常在所有线程中都是相同的(例如:连接错误),我希望应用程序仅显示 MessageBox 一次,并有可能在将来再次显示一次。

最佳答案

onceFlag,它是 std::once_flag class 的一个对象,是这里的关键。

设置了std::once_flag对象的内部状态,使得std::call_once函数没有第二次执行。

如果您注意到,这里的标准只为 std::once_flag 类公开了一个不带参数的构造函数,并且没有重载赋值运算符。标准可能已声明私有(private)赋值运算符或使用“显式删除特殊成员函数。(C++11)”。

据我所知,您无法更改/修改设置的内部状态。

尝试这种奇怪的方式,如果你真的需要......

声明不同的std::once_flag标志

std::once_flag flag1,flag2,flag3; //Three different flags.

{
....
std::call_once ( flag1, [ ]{ /* my code body here runs only once */ } ); //track first thread call
std::call_once ( flag2, [ ]{ /* my code body here runs only once */ } ); //track second thread call
std::call_once ( flag3, [ ]{ /* my code body here runs only once */ } ); //third third thread call

}

关于c++ - 定时一次标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43212150/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com