2

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

类似于 javascript 如何使用time = window.setTimeout("alert('Hello');", 500);if(time) clearTimeout(time)

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

--

我这样做的原因是我有一个数据库查询,前几次需要 3/4 秒并为此显示一个等待光标,但是在缓存查询并且光标闪烁等待和然后闪烁恢复正常!

谢谢你的时间!

4

2 回答 2

0

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

如果必须取消函数,则必须锁定互斥体,同时设置取消标志。

由于线程参数的处理可能变得复杂,我会将它们一起放入一个结构中,动态分配结构并在我可能取消函数调用并将一个 shared_ptr 传递给结构的地方保留实例或 shared_ptr线程函数。

于 2012-08-17T14:41:55.017 回答
0

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

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

多线程: 在另一个线程中运行函数。但是,要在线程之间同步函数的结果可能需要了解您没有的多线程。如果您真的想在一段时间后终止操作,您可以强行关闭线程 - 但您可能不想这样做。你可能想让它完成,只要它完成(它不会阻塞主线程,所以它不应该惹恼用户)。

您使用的 GUI 库可能会使后面的选项变得容易,但我不知道您使用的是什么。

于 2012-08-17T14:19:09.637 回答