關於'delay'問題 已爬過文了 |
尚未結案
|
CharlesWen
一般會員 發表:4 回覆:7 積分:2 註冊:2004-11-05 發送簡訊給我 |
各位安安,我又來了 關於delay的寫法,先前爬文都了解過了
但是去除Sleep的指令外(第一種)
就只剩下(第二種)
void delay(DWORD delay_time)
{
DWORD BeginTime; BeginTime = GetTickCount();
do{
Application -> ProcessMessages();
}while(GetTickCount() - BeginTime < delay_time);
}
類似模式的寫法 因為小弟的delay副程式是放在另一個檔案上(共用變數檔)
並未和主程式一起放 之前在用"Sleep'這個指令的時候,會造成程式停在執行緒的其中一段
所以改用第二種寫法
不過卻發現第二種寫法的迴圈數無法控制
例如:Sleep(1000) ==>DELAY 1000ms
可是第二種寫法:delay() ==>不管括號內的數值是多少,幾乎都是延遲4SEC 所以想請教
是否有其他的寫法可以不用Sleep指令,但是又能較精確指定我所需要的時間...
|
pkdemon
初階會員 發表:2 回覆:51 積分:25 註冊:2004-09-13 發送簡訊給我 |
CharlesWen您好, 下面是我用的方法,跟您的蠻像的,參考看看吧
void delay(int time_period) { long current ,start , lapsedCount; if (time_period == 0) time_period = 1; start = GetTickCount(); do { current = GetTickCount(); lapsedCount = current - start; if (lapsedCount <= 0) start = GetTickCount(); } while (lapsedCount <= time_period); } |
CharlesWen
一般會員 發表:4 回覆:7 積分:2 註冊:2004-11-05 發送簡訊給我 |
|
orson
中階會員 發表:5 回覆:135 積分:58 註冊:2002-07-11 發送簡訊給我 |
引言: 各位安安,我又來了 關於delay的寫法,先前爬文都了解過了 但是去除Sleep的指令外(第一種) 就只剩下(第二種) void delay(DWORD delay_time) { DWORD BeginTime; BeginTime = GetTickCount(); do{ Application -> ProcessMessages(); }while(GetTickCount() - BeginTime < delay_time); } 類似模式的寫法 因為小弟的delay副程式是放在另一個檔案上(共用變數檔) 並未和主程式一起放 之前在用"Sleep'這個指令的時候,會造成程式停在執行緒的其中一段 所以改用第二種寫法 不過卻發現第二種寫法的迴圈數無法控制 例如:Sleep(1000) ==>DELAY 1000ms 可是第二種寫法:delay() ==>不管括號內的數值是多少,幾乎都是延遲4SEC 所以想請教 是否有其他的寫法可以不用Sleep指令,但是又能較精確指定我所需要的時間... >>< face="Verdana, Arial, Helvetica"> 小改一行 把application.process改成sleep(0)試試 Orson |
CharlesWen
一般會員 發表:4 回覆:7 積分:2 註冊:2004-11-05 發送簡訊給我 |
|
ldd
一般會員 發表:12 回覆:62 積分:19 註冊:2004-07-06 發送簡訊給我 |
|
CharlesWen
一般會員 發表:4 回覆:7 積分:2 註冊:2004-11-05 發送簡訊給我 |
|
jimmy_and_you
初階會員 發表:20 回覆:74 積分:33 註冊:2003-05-12 發送簡訊給我 |
int TMainForm::Delay(unsigned long d) { struct time now; unsigned long s,n; if ( d >23*60*60*100 ) //max delay time 23 hours return -1; //mini delay time 1/100 second gettime(&now); s=((unsigned long)(now.ti_hour)*360000) ((unsigned long)(now.ti_min)*6000) ((unsigned long)(now.ti_sec)*100) ((unsigned long)(now.ti_hund)); for(;;) { Application -> ProcessMessages(); gettime(&now); n=((unsigned long)(now.ti_hour)*360000) ((unsigned long)(now.ti_min)*6000) ((unsigned long)(now.ti_sec)*100) ((unsigned long)(now.ti_hund)); if ( n < s ) n=24*60*60*100-s n; //get delay time if change day else n=n-s; if ( n >= d ) break; } return 0; }這是我以前寫的CODE可以試試看,不過精確度只到1/100秒 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |