C++ C++;在时间结束后调用函数或取消

C++ C++;在时间结束后调用函数或取消,c++,timeout,countdown,C++,Timeout,Countdown,我正在寻找一种简单的跨平台方法,在一段时间后调用函数,并可以选择提前终止它 类似于javascript如何处理time=window.setTimeout(“警报('Hello');”,500)和如果(时间)清除超时(时间) 这是不是可能在基本C++中没有任何额外的(非标准)库或框架? 如果是这样,你能给我一个指向正确方向的指针吗 -- 我这样做的原因是,我有一个DB查询,前几次需要3/4秒,并为此显示一个等待光标,但缓存查询后,光标闪烁等待,然后闪烁回到正常状态,这看起来有点愚蠢/分散注意力

我正在寻找一种简单的跨平台方法,在一段时间后调用函数,并可以选择提前终止它

类似于javascript如何处理
time=window.setTimeout(“警报('Hello');”,500)
如果(时间)清除超时(时间)

这是不是可能在基本C++中没有任何额外的(非标准)库或框架? 如果是这样,你能给我一个指向正确方向的指针吗

--

我这样做的原因是,我有一个DB查询,前几次需要3/4秒,并为此显示一个等待光标,但缓存查询后,光标闪烁等待,然后闪烁回到正常状态,这看起来有点愚蠢/分散注意力


谢谢你的时间

调用函数是一种阻塞操作。我可以想出几种方法来近似你想要的行为

时间切片: 使函数执行一小段工作,从而逐步推进其总体目标。您可以重复调用它,直到x时间过去

多线程: 在另一个线程中运行该函数。但是,在线程之间同步函数的结果可能需要理解您没有的多线程处理。如果您真的想在一段时间后终止操作,您可以强制关闭线程,但您可能不想这样做。您可能希望在它完成时让它完成(它不会阻塞主线程,因此不会打扰用户)


您正在使用的GUI库可能使后面的选项变得简单,但我不知道您正在使用什么。

调用函数是一种阻塞操作。我可以想出几种方法来近似你想要的行为

时间切片: 使函数执行一小段工作,从而逐步推进其总体目标。您可以重复调用它,直到x时间过去

多线程: 在另一个线程中运行该函数。但是,在线程之间同步函数的结果可能需要理解您没有的多线程处理。如果您真的想在一段时间后终止操作,您可以强制关闭线程,但您可能不想这样做。您可能希望在它完成时让它完成(它不会阻塞主线程,因此不会打扰用户)


您正在使用的GUI库可能使后面的选项更容易,但我不知道您正在使用什么。

一个简单的解决方案是跨线程,使用要执行的函数、互斥、取消标志和超时。线程函数将获取所有这些参数,在给定的超时时间内休眠,锁定互斥锁并检查标志。如果未设置该标志,将调用要执行的函数

如果必须取消该函数,则必须在设置cancel标志时锁定互斥锁


由于线程参数的处理可能会变得复杂,我会将它们全部合并到一个结构中,动态分配结构,并在我可能取消函数调用并将一个共享ptr传递给线程函数的位置将实例或共享ptr保留到结构中。

一个简单的解决方案是跨越一个线程,使用要执行的函数、互斥、取消标志和超时。线程函数将获取所有这些参数,在给定的超时时间内休眠,锁定互斥锁并检查标志。如果未设置该标志,将调用要执行的函数

如果必须取消该函数,则必须在设置cancel标志时锁定互斥锁


由于线程参数的处理可能会变得复杂,我会将它们全部合并到一个结构中,动态分配结构,并在可能取消函数调用并将一个共享ptr传递给线程函数的位置将实例或共享ptr保留到结构。

我为另一个问题创建了一个简单的计时器事件队列,您可以查看它是否可以使用。请看,您要求提供“跨平台”解决方案,但您不想使用“C++”标准之外的任何库,但您真正的问题是等待光标的闪烁?您的目标平台具体是什么?您使用什么进行GUI开发(Win32、wxWindows、QT)?在Windows/Linux/Other?GUI上,适用于Windows,在某些情况下适用于Unix。我之所以提到这些库,是因为它是其他人项目的一部分,我无法改变它的工作方式或使它膨胀。C++11是否可用?我制作了一个简单的计时器事件队列来回答另一个问题,您可以看看它是否可以使用。请看,您要求提供“跨平台”解决方案,但您不想使用“C++”标准之外的任何库,但您真正的问题是等待光标的闪烁?您的目标平台具体是什么?您使用什么进行GUI开发(Win32、wxWindows、QT)?在Windows/Linux/Other?GUI上,适用于Windows,在某些情况下适用于Unix。我之所以提到这些库,是因为它是其他人项目的一部分,我不能改变它的工作方式,也不能使它膨胀。C++11是否可用?