簡體   English   中英

C++ 中的“交互式”休眠

[英]“Interactive” Sleep in C++

前段時間開始學習c++。 我用 Visual Studio 2010 做了很多控制台程序,現在我想制作 win32 程序。 我閱讀了很多教程,現在我了解了基礎知識。

我做了一個按鈕,調用另一個 function。 function 一切正常。 但是這個 function 中有 Sleep(x) 並且在睡眠沒有結束時 GUI 沒有響應。 function 在 60 秒內完成,因為其中有很多睡眠,但它完成了所有應該做的事情,這次 GUI 沒有響應。

我想我知道這個問題的根源。 在我看來,問題是睡眠完全暫停了應用程序(Windows 說:沒有響應)。

如何進行不凍結 GUI 的睡眠/暫停? 是否有 function 或者我必須以完全不同的方式進行操作?

先感謝您!

在我看來,問題是睡眠完全暫停應用程序

是的。

如何進行不凍結 GUI 的睡眠/暫停?

為什么你首先需要睡覺? 如果 function 行為不端,您始終可以在后台線程中運行它(但請注意,這會增加相當多的復雜性和難度)。 通常,您根本不需要睡覺。 如果您確實必須休眠,則使其成為一個循環,直到足夠的時間過去,處理來自操作系統的事件並調用產生時間片的Sleep(0)

你能把你的代碼分成幾個部分並使用計時器而不是睡眠嗎? 這將使消息泵保持運行。 查看 MSDN 中關於使用計時器的這篇文章: http://msdn.microsoft.com/en-us/library/ms644901%28v=VS.85%29.aspx

要么將工作卸載到單獨的線程(參見CreateThread ),要么使用PeekMessage等。 al 在一個緊密的循環中處理 window 消息並保持 GUI 活動。

當然,你應該問自己是否真的需要睡覺。 正如您所說,主線程(輪詢消息泵的線程)中的睡眠會阻止任何 GUI 處理。

你必須使用線程。 請記住,如果您的 GUI 中有一個長時間運行的進程,您必須創建一個線程並讓它處理您的所有代碼——在這種情況下,它包含許多睡眠指令。 一旦線程完成其工作,它將通知您,然后您可以從中提取數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM