gpt4 book ai didi

c++ - - C++ - 使用计时器线程启动异常,精度 ms

转载 作者:行者123 更新时间:2023-11-30 20:38:48 25 4
gpt4 key购买 nike

我需要一个计时器,在 700 800 毫秒后抛出异常,你有什么建议?有东西已经写了吗?我在 boost 中进行了搜索,但没有什么有趣的内容。

我想做的是这样的:

void method1(List l) throws TimeoutException{
Timer t;
t.start();
while(!l.isEmpty()){
//DO SOMETHING
...........
}
t.stop();
}

void method2(List l){
try{
method2(l);
catch(TimeoutException e){
//do something
}
}

最佳答案

嗯,修改后就更清楚了。您可以通过让 Timer::start() 生成一个运行计时器的线程来实现此目的,并在时间用完时设置某种成员,例如 bool Timer::expired。然后,使用适当的访问器,您的 method1 可以执行以下操作:

void method1(List l) throws TimeoutException
{
Timer t;
t.start();

while(!l.isEmpty() && !t.isExpired())
{
//DO SOMETHING
...........
}

t.stop();
if(t.isExpired() && !l.isEmpty())
throw(TimeoutException(/*...*/));
}

如果有更简单的方法使用升压异步计时器或其他东西,应该有人大声说出来。我没有使用足够的 boost 来对此进行可靠的评论。

编辑:

我在下面评论了我对抛出破坏数据的担忧。如果您仍然确实想在超时时立即强制中断列表处理循环,this page描述如何让 Microsoft 将异常从一个线程抛出到另一个线程。跨线程抛出通常取决于操作系统,但 boost does have some shenanigans尝试以可移植的方式做到这一点。我还没有尝试过这个方法;看起来异常必须从特定基类派生才能支持使用 boost 方法进行传输。

关于c++ - - C++ - 使用计时器线程启动异常,精度 ms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28119872/

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