![]() |
|
|||||||
| 論壇說明 |
|
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
|
主題工具 | 顯示模式 |
|
|
#6 (permalink) |
|
管理版主
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
因為while 是個空迴圈
所以運行中 CPU不只會 100%做工 就算在 windows的多工控制下 作其他事情也會反應慢半拍 所以以下是改良方式 語法:
#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <time.h>
using namespace std;
bool CheckMessageQueue()
{
MSG msg;
while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
if(msg.message==WM_QUIT) return false;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return true;
}
long Delay_DoEvents(int sec)
{
clock_t start_time; //delay,使用CLOCK function
long number_of_times=0;
start_time = clock();
while((clock() - start_time) < sec * CLOCKS_PER_SEC){
number_of_times= number_of_times+ (int)CheckMessageQueue();
}
return number_of_times;
}
int main(int argc, char *argv[])
{
Delay_DoEvents(5);
system("PAUSE");
return EXIT_SUCCESS;
}
實驗下雖然 CPU也會跑在100% 但 作其他事情就不會反應慢半拍 (比如運行時 作一個滑鼠點擊桌面下層視窗 的視窗切換動作,沒有DoEvents設計的程式 就要等windows介入調配,而用上面的程式就可馬上執行視窗切換的動作,毫無延宕) |
|
|
送花文章: 2061,
|