gpt4 book ai didi

c - gtk_events_pending() 返回 FALSE,事件仍然未决

转载 作者:太空狗 更新时间:2023-10-29 15:07:13 25 4
gpt4 key购买 nike

我正在开发一个具有开始和停止按钮的应用程序。这些按钮阻塞了 UI,由于各种原因,我无法生成线程。

当按下这些按钮时,我一直在显示一个工作屏幕,使用:

while (gtk_events_pending()) gtk_main_iteration();

这确保在启动/停止操作开始之前加载工作屏幕。

我最近升级到 GTK+ 3.8.6,看来 gtk_events_pending() 现在坏了。现在,有时窗口显示,但窗口中的图像不存在。有时窗口甚至不显示。

有问题的函数如下所示:

gtk_widget_show(working_screen);
while (gtk_events_pending()) gtk_main_iteration();

long_running_blocking_function();

如果我这样做:

int busy_wait = 0;
gtk_widget_show(working_screen);
while (gtk_events_pending() || busy_wait < 5)
{
gtk_main_iteration();
if (!gtk_events_pending()) ++busy_wait;
}

long_running_blocking_function();

...它工作正常。但是,我知道 busy_wait 需要更长的时间只是时间问题,所以我想找到更好的答案。有人遇到过这个问题吗?有人对我如何解决它有任何想法吗?

最佳答案

尝试使用 g_main_context_pending(NULL)g_main_context_iteration(NULL,FALSE) 而不是 gtk_events_pending(),后者已弃用。


这可能是一个启动的时间问题(可能是你的循环在任何事件注册到主循环之前启动,因此立即退出)——但由于缺少代码,这只是胡乱猜测。


中断条件也是错误的,你不想在特定时间点处理完所有事件后立即退出,你想继续直到 long-run-ops 完成。这意味着您需要在操作完成时发出信号,检查您当前使用的循环中的标志并使用 *_iteration(...)

的阻塞模式

关于c - gtk_events_pending() 返回 FALSE,事件仍然未决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21271484/

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