- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在用 C 语言制作 GTK+3 应用程序,我想要一个微调器来显示程序何时处理数据。这是我通常拥有的:
main()
{
//Some statements
g_signal_connect(G_OBJECT(btnGenerate), "clicked", G_CALLBACK(Generate), &mainform);
}
void Generate(GtkWidget *btnGenerate, form_widgets *p_main_form)
{
gtk_spinner_start(GTK_SPINNER(p_main_form->spnProcessing));
Begin_Lengthy_Processing(Parameters, Galore, ...);
//gtk_spinner_stop(GTK_SPINNER(p_main_form->spnProcessing));
}
我已注释掉停止函数,因此即使在函数完成后我也可以看到旋转器旋转,但旋转器在函数完成后启动,我怀疑它在主函数中打开循环。
我还发现,在执行长时间运行的函数时,整个界面都会卡住。
有没有办法让它在回调函数中启动并显示?我发现了同样的问题,但它使用Python和线程。这是 C,而不是 Python,所以我认为情况有所不同。
最佳答案
您需要在单独的线程中运行冗长的计算,或者将其分成 block 并在主线程中作为空闲回调单独运行每个 block 。
如果您的冗长计算需要一组输入,并且在完成之前不需要更多输入,那么您应该将其构造为 GTask
并使用g_task_run_in_thread()
开始任务。其结果将通过 GTask 的 GAsyncReadyCallback 传回主线程。有一个例子here .
如果在进行过程中需要更多输入,您可能需要使用 GAsyncQueue
为其提供更多输入,以及 GThreadPool
提供线程(通过多次调用冗长的函数来分摊创建线程的成本,并防止拒绝服务)。
GNOME 开发人员文档给出了 overview of how to do threading .
关于c - GtkSpinner 具有持久的功能与 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42565518/
我正在用 C 语言制作 GTK+3 应用程序,我想要一个微调器来显示程序何时处理数据。这是我通常拥有的: main() { //Some statements g_signal_con
我一直在 Qt 文档中搜索类似于 GtkSpinner 的内容,但发现只能使用 QProgressBar,最小值和最大值都设置为 0,但这不是我想要的。 Qt中有这样的widget吗? 最佳答案 QL
我是一名优秀的程序员,十分优秀!