gpt4 book ai didi

c++ - 如何使用耗时的操作更新 C++ 中的 GTK+ GUI?

转载 作者:行者123 更新时间:2023-11-30 05:13:10 28 4
gpt4 key购买 nike

我正在使用 OpenMP 执行一项耗时的操作。我无法在执行操作的同时从耗时的循环内更新来自 GTK+ 的 ProgressBar。我更新 ProgressBar 的代码,但它会在一切完成后更新。不是随着代码的进展。

这是我的虚拟代码,它在一切完成之前不会更新 ProgressBar:

void largeTimeConsumingFunction (GtkProgressBar** progressBar) {

int extensiveOperationSize = 1000000;

#pragma omp parallel for ordered schedule(dynamic)
for (int i = 0; i < extensiveOperationSize; i++) {
// Do something that will take a lot of of time with data

#pragma omp ordered
{
// Update the progress bar
gtk_progress_bar_set_fraction(*progressBar, i/(double)extensiveOperationSize);
}

}
}

当我执行相同操作但不使用 OpenMP 时,会发生同样的情况。直到最后才更新。

我怎样才能让 GTK+ 小部件在循环工作的同时进行更新?

编辑:这只是一个虚拟代码,以使其简短易读。它与我的实际代码具有相同的结构,但在我的实际代码中,我事先并不知道我将要处理的项目的大小。它可能是 10 个或超过 100 万个项目,我必须对每个项目执行一些操作。

最佳答案

这里有两个潜在的问题:

首先,如果你正在执行可能阻塞主线程的长时间运行的计算,你必须调用

while (gtk_events_pending ())
gtk_main_iteration ();

不时保持 UI 响应(包括重绘自身)。

其次,你应该call GTK+ functions only from main thread .

关于c++ - 如何使用耗时的操作更新 C++ 中的 GTK+ GUI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44060602/

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