方法
GLibCondwait_until
自: 2.32
声明 [源]
gboolean
g_cond_wait_until (
GCond* cond,
GMutex* mutex,
gint64 end_time
)
描述 [源]
等待直到 cond
被信号或者 end_time
已经过。
与 g_cond_wait()
类似,可能出现虚假或窃取唤醒。因此,在条件变量上等待时,应始终在一个基于显式检查的谓词的循环中进行。
如果条件变量被信号(或遇到虚假唤醒),则返回 TRUE
。如果 end_time
已过,则返回 FALSE
。
以下代码展示了如何正确地在条件变量上执行定时等待(扩展了 GCond
文档中的示例)
gpointer
pop_data_timed (void)
{
gint64 end_time;
gpointer data;
g_mutex_lock (&data_mutex);
end_time = g_get_monotonic_time () + 5 * G_TIME_SPAN_SECOND;
while (!current_data)
if (!g_cond_wait_until (&data_cond, &data_mutex, end_time))
{
// timeout has passed.
g_mutex_unlock (&data_mutex);
return NULL;
}
// there is data for us
data = current_data;
current_data = NULL;
g_mutex_unlock (&data_mutex);
return data;
}
请注意,结束时间是在进入循环之前计算一次的,并在循环中使用。这是在这个 API 上使用绝对时间的动机 — 如果直接将 5 秒的相对时间传递给调用,并且发生虚假唤醒,则程序将不得不重新开始等待(这将导致总等待时间超过 5 秒)。
自: 2.32
参数
mutex
-
类型:
GMutex
当前被锁定的一个
GMutex
。数据由方法的调用者拥有。 end_time
-
类型:
gint64
等待到的单调时间。