十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無(wú)憂售后,網(wǎng)站問(wèn)題一站解決
消息隊(duì)列的等待就是GetMessage,沒(méi)辦法自己寫,除非你打算改Windows本身。這個(gè)函數(shù)如果沒(méi)有消息進(jìn)來(lái)就會(huì)釋放CPU,如果不希望等待用PeekMessage。消息循環(huán)的格式是固定的。
創(chuàng)新互聯(lián)建站專注于珠山網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供珠山營(yíng)銷型網(wǎng)站建設(shè),珠山網(wǎng)站制作、珠山網(wǎng)頁(yè)設(shè)計(jì)、珠山網(wǎng)站官網(wǎng)定制、小程序定制開發(fā)服務(wù),打造珠山網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供珠山網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
等待按鍵 getch 任意按鍵無(wú)需回車 頭文件視使用條件而定
等待延時(shí) sleep
使用要帶上頭文件:
#include windows.h
Sleep函數(shù):
功 能: 執(zhí)行掛起一段時(shí)間
用 法: unsigned sleep(unsigned seconds);
注意:
1.在VC中使用帶上頭文件#include windows.h,在Linux下,gcc編譯器中,使用的頭文件因gcc版本的不同而不同#include unistd.h
2.在VC中,Sleep中的第一個(gè)英文字符為大寫的"S" ,在linux下不要大寫,在標(biāo)準(zhǔn)C中是sleep, 不要大寫,簡(jiǎn)單的說(shuō)VC用Sleep, 別的一律使用sleep。
3.在VC中,Sleep()里面的單位,是以毫秒為單位,所以如果想讓函數(shù)滯留1秒的話,應(yīng)該是Sleep(1000); 在Linux下,sleep()里面的單位是秒,而不是毫秒。
示例:
#includestdio.h
#include windows.h
int main()
{
int a=100;?
Sleep(3000);
printf("%d",a);
return 0;
}
usleep函數(shù):
功能: usleep功能把進(jìn)程掛起一段時(shí)間, 單位是微秒us(百萬(wàn)分之一秒)。
語(yǔ)法: void usleep(int micro_seconds);
返回值: 無(wú)
注意:這個(gè)函數(shù)不能工作在 Windows 操作系統(tǒng)中。
usleep() 與sleep()類似,用于延遲掛起進(jìn)程。進(jìn)程被掛起放到reday queue。只是一般情況下,延遲時(shí)間數(shù)量級(jí)是秒的時(shí)候,盡可能使用sleep()函數(shù)。且此函數(shù)已被廢除,可使用nanosleep。
如果延遲時(shí)間為幾十毫秒,或者更小,盡可能使用usleep()函數(shù)。這樣才能最佳的利用CPU時(shí)間。
delay函數(shù):
功 能: 將程序的執(zhí)行暫停一段時(shí)間,單位是毫秒ms(千分之一秒)
用 法: void delay(unsigned milliseconds);
示例:
#includedos.h
int main(void)
{
sound(440);
delay(500);
nosound();
return 0;
}
delay()是循環(huán)等待,該進(jìn)程還在運(yùn)行,占用處理器。
sleep()不同,它會(huì)被掛起,把處理器讓給其他的進(jìn)程。
sleep 參數(shù)指定暫停時(shí)間, 單位是 s delay 參數(shù)指定暫停時(shí)間, 單位是 ms 所以 sleep(n) == delay(1000*n) 原型:extern void sleep(unsigned int sec); 用法:#include system.h 功能:短暫延時(shí) 說(shuō)明:延時(shí)sec秒舉例:// sleep.c #include system.h main(){int c;clrscr();printf("\nHello, world!");sleep(1);clrscr();printf("\nHi, guys");getchar();return 0;}原型:extern void delay(unsigned int msec); 用法:#include system.h 功能:短暫延時(shí) 說(shuō)明:延時(shí)msec*4毫秒舉例:// delay.c #include system.h main(){int c;clrscr();printf("\nHello, world!"); delay(250); // 250*4=1000msec=1secclrscr();printf("\nHi, guys");getchar();return 0;}wait(等待子進(jìn)程中斷或結(jié)束)相關(guān)函數(shù)waitpid,fork表頭文件#includesys/types.h #includesys/wait.h 定義函數(shù)pid_t wait (int * status);函數(shù)說(shuō)明 wait()會(huì)暫時(shí)停止目前進(jìn)程的執(zhí)行,直到有信號(hào)來(lái)到或子進(jìn)程結(jié)束。如果在調(diào)用wait()時(shí)子進(jìn)程已經(jīng)結(jié)束,則wait()會(huì)立即返回子進(jìn)程結(jié)束狀態(tài) 值。子進(jìn)程的結(jié)束狀態(tài)值會(huì)由參數(shù)status 返回,而子進(jìn)程的進(jìn)程識(shí)別碼也會(huì)一快返回。如果不在意結(jié)束狀態(tài)值,則參數(shù)status可以設(shè)成NULL。子進(jìn)程的結(jié)束狀態(tài)值請(qǐng)參考waitpid()。 返回值如果執(zhí)行成功則返回子進(jìn)程識(shí)別碼(PID),如果有錯(cuò)誤發(fā)生則返回-1。失敗原因存于errno中。
如果對(duì)時(shí)間要求非常精確,可以考慮采用和匯編中處理的情況,看看cpu的頻率,將for命令分解成匯編語(yǔ)言,看多少毫秒執(zhí)行一次命令,然后設(shè)置循環(huán)次數(shù),這樣足夠精確,實(shí)際上在匯編下也是這么做的。
單片機(jī)延時(shí)程序?
(1)用定時(shí)器算出來(lái),弄一個(gè)死循環(huán),同時(shí)開定時(shí)器,時(shí)間到了就break。
(2)用延時(shí)子函數(shù),也是一個(gè)循環(huán),每個(gè)循環(huán)周期執(zhí)行N個(gè)NOP指令,這個(gè)N由匯編語(yǔ)言來(lái)控制,也就是循環(huán)體里插入?yún)R編語(yǔ)句,一個(gè)NOP的時(shí)間由單片機(jī)決定,有的是1個(gè)機(jī)器周期,有的是2個(gè),但是具體的單片機(jī)執(zhí)行NOP的時(shí)間是相同的,你可以算一個(gè)有多少個(gè)NOP就知道延時(shí)了多長(zhǎng)時(shí)間。