史萊姆論壇

史萊姆論壇 (http://forum.slime.com.tw/)
-   程式語言討論區 (http://forum.slime.com.tw/f76.html)
-   -   如何寫出 延遲 1 - 2 秒的時間的程式 ? (http://forum.slime.com.tw/thread162966.html)

getter 2005-12-09 10:52 PM

如何寫出 延遲 1 - 2 秒的時間的程式 ?
 
如何寫出 延遲 1 - 2 秒的時間的程式 ?
因為程式除錯時,要一直按單步執行有點累。 :dcft689kj
或是要觀察變數的內容變化要做時間延遲 . . . :drtyt76h6

snoopy 2005-12-09 11:07 PM

空回圈 或巣狀空回圈

getter 2005-12-10 02:28 AM

引用:

作者: snoopy
空回圈 或巣狀空回圈

試過了 ...
結果不到一秒就 做完了...
目的沒達到 . . .

現在的電腦跑這種程式實在是 . . . 太快了 :decfghi6:

剛剛又試了一次,巣狀空回圈
for(i=0;i<32767;i++) for(j=0;j<10000*sec;j++);
才接進 1 秒 ... :dcft689kj

kinco 2005-12-10 09:14 AM

clock_t start_time; //delay,使用CLOCK function
start_time = clock();
while((clock() - start_time) < 1 * CLOCKS_PER_SEC){}

上面的1是表示延遲幾秒~初始直是1秒

getter 2005-12-10 10:16 AM

引用:

作者: kinco
clock_t start_time; //delay,使用CLOCK function
start_time = clock();
while((clock() - start_time) < 1 * CLOCKS_PER_SEC){}

上面的1是表示延遲幾秒~初始直是1秒

感恩啦 ... 上課先 . . .

mini 2005-12-11 10:06 AM

因為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;
}

結合了類 VB 的 DoEvents 函式
實驗下雖然 CPU也會跑在100%
但 作其他事情就不會反應慢半拍
(比如運行時 作一個滑鼠點擊桌面下層視窗 的視窗切換動作,沒有DoEvents設計的程式
就要等windows介入調配,而用上面的程式就可馬上執行視窗切換的動作,毫無延宕)

getter 2005-12-11 01:06 PM

引用:

作者: mini
因為while 是個空迴圈
所以運行中 CPU不只會 100%做工
就算在 windows的多工控制下 作其他事情也會反應慢半拍
所以以下是改良方式

#include <cstdlib>
#include <iostream>
#include <windows.h>
#include <time.h>

using namespace std;

bool CheckMessageQueue()
{
MSG msg;
...

感謝感謝

目前知道可以延遲時間的方法又多了一種
首先是 snoopy 大大說的,空回圈 或巣狀空回圈
後來有找某些書本上說,容易受到電腦等及影響 ...
而且 for loop 會受到 變數類型限制,巣狀的話
可以達到一個 for loop 做不倒的延遲效過,但是
時間的延遲上而不好抓,只能概算一下

再來是 kinco 大大說的,用時間函式的方法
時間的準度有了,但似乎會影響 Windows 的其他程式運算
(跟 mini 大大說的一樣)...

最後是 mini 大大說的,改良版方法吧... 是很好的但是
以我目前的程度來說,可能高檔了些...
DEV-C 在 .c 的原始碼底下就不能編譯了,但在 .cpp 底下 OK
這應該是 C++ 的語法吧,學校還沒教...,我也一直想學,
但書局的書...,試問一下是要學 Borland C++ 還是微軟的 C++
哪個好阿 . . .

mini 2005-12-12 10:59 AM

To 要學 Borland C++ 還是微軟的 VC++ 哪個好阿?
A: 各有千秋吧,只用過 VC 所以也不便說什麼...
只是因為VC是MS出的所以 設計視窗軟體比較有利點(MFC)
另外學會 MFC 會對 windows 的內部流程有較好的認知

getter 2005-12-12 01:21 PM

引用:

作者: mini
To 要學 Borland C++ 還是微軟的 VC++ 哪個好阿?
A: 各有千秋吧,只用過 VC 所以也不便說什麼...
只是因為VC是MS出的所以 設計視窗軟體比較有利點(MFC)
另外學會 MFC 會對 windows 的內部流程有較好的認知

各有千秋 ... 那還真的令人難選


所有時間均為台北時間。現在的時間是 04:03 PM

Powered by vBulletin® 版本 3.6.8
版權所有 ©2000 - 2025, Jelsoft Enterprises Ltd.

『服務條款』

* 有問題不知道該怎麼解決嗎?請聯絡本站的系統管理員 *


SEO by vBSEO 3.6.1