Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在GTK 3.8中强制屏幕刷新?_C_Gtk3 - Fatal编程技术网

C 如何在GTK 3.8中强制屏幕刷新?

C 如何在GTK 3.8中强制屏幕刷新?,c,gtk3,C,Gtk3,找到了解决办法。见下文 我正在滚动窗口中使用GTK 3.8GTK_grid。C代码处理大量数据,并在网格中显示一些数据。GTK在程序完成处理所有数据之前不会绘制网格。添加数据时,如何强制GTK 3刷新屏幕 我尝试了gtk\u widget\u queue\u draw但什么也没发生。 我还测试了gtk_widget_show_now,但什么也没发生 该进程可能会运行几秒钟或几分钟。用户可以选择要显示的数据范围和刷新。刷新可能是每5秒或每10行一次。如果其中任何一个成功,我都会很高兴 我能找到的唯

找到了解决办法。见下文

我正在滚动窗口中使用GTK 3.8GTK_grid。C代码处理大量数据,并在网格中显示一些数据。GTK在程序完成处理所有数据之前不会绘制网格。添加数据时,如何强制GTK 3刷新屏幕

我尝试了gtk\u widget\u queue\u draw但什么也没发生。 我还测试了gtk_widget_show_now,但什么也没发生

该进程可能会运行几秒钟或几分钟。用户可以选择要显示的数据范围和刷新。刷新可能是每5秒或每10行一次。如果其中任何一个成功,我都会很高兴

我能找到的唯一相关问题是关于GTK 2,建议使用GTK_widget_queue_draw,但它不起作用。我阅读了所有的GTK文档,其中推荐了相同的功能。文档、示例和答案中缺少一些内容

据我所见,我必须处理100行,然后停止并显示一个按钮来请求下一个100行。这是不可行的。用户需要将数据滚动到底

GTK_网格在版本3中似乎更改了几次。如果有一种更有效的方式来显示行和列,我不会被锁定在GTK_网格中。没有恢复到早期GTK的选项


我在GTK3.8中发现了一些有用的东西。在gtk_widget_queue_draw之后添加一行:

gtk_widget_queue_draw(results);  
while (g_main_context_pending(NULL)) {
    g_main_context_iteration(NULL,FALSE);
}

阅读了解更多详细信息。

我认为您需要发布一些代码,因为答案可能在您的事件处理中[特别是对于公开事件]。如果您正在进行繁重的计算,则可能会使事件处理程序处于饥饿状态。您还可以考虑将计算拆分为单独的线程,以便主线程可以自由处理所有与GTK相关的活动。您好,克雷格,处理方式小于可用的功率。等待在SSD上。代码有足够的时间重新绘制。当我为GTK添加有趣的额外代码时,即使每一行都有一个重画,重画也会尖叫。我找不到一个选项来结束这个问题。你刚刚发布的
g\u main\u context.*
将起作用(即我提到的事件)。我建议的线程分割不是出于速度原因,而是为了获得平滑的事件处理,而不必在各种/多个地方插入
g\u main\u context.*
调用。没必要结束这个问题,你很好。只需在顶部添加一行,表示您找到了解决方案:(例如,“找到了解决方案,请参见下文”)。这对其他人来说更容易看到。不过,我会在缩进的代码块中重新格式化解决方案。你也可以像其他人一样自由发布你的解决方案作为真实答案。你能提供最少的代码来复制吗?