使用Windows的Sleep()时GTK窗口停止

时间:2011-12-01 10:58:30

标签: c windows sleep gtk

我做了一个小应用程序,说明了Quicksort,我有第二个窗口,显示每个级别排序的当前数组。我被要求提出某种延迟,所以我选择使用windows.h的Sleep()。但是,出于某种原因,窗口停止运行,只有在之后才开始工作。像我想要的那样,每个级别都没有显示任何内容。它在没有Sleep()的情况下有效。

它只是一个基本的快速排序,我将Sleep()放在打印机制之后,打印机制都插在底座支架内的某处。

如何调用某种暂停机制而不会导致暴力循环?

2 个答案:

答案 0 :(得分:4)

GTK +不是多线程的。如果您使用Sleep()停止流程,那么当然UI不会更新,因为该流程不再执行运行GTK +的工作,它会卡在Sleep()中。

正确的解决方法可能是使其更加面向事件,以便您在排序算法中采取一步作为对事件的响应。你可以用例如g_timeout_add()来源事件,这可能只是简单的函数调用直接进入你的代码。

答案 1 :(得分:1)

您的睡眠呼叫可能在主事件循环中,导致整个应用程序挂起。没有源代码,很难告诉你在哪里放置睡眠以使UI响应,但排序“慢”