第一種方案是大家熟悉的截獲定時訊息的途徑。在windows提供給我們使用的系統資源當中,有一種稱為「定時器(timer)」的特殊資源,在申請了這類資源的程式當中每間隔一段時間會接收到值為wm_timer的訊息。需要定時執行的**可以放在該訊息的處理部分。如果在vc中,我們可以具體按照以下步驟實現這一目的:
在classview中選中「cmainframe」類,然後按ctrl+w啟用classwizard,在「message map」選項卡中class name選「cmainframe」,接著在「message」中選「wm_timer」,最後按下「add funcation」。以上步驟加入了對wm_timer訊息的對映處理。
回到classview中,雙擊「oncreate」成員函式,在函式的末尾新增申請timer的語句:
settimer(100,1000,null);//申請乙個標識值為100的timer,定時間隔為1000毫秒(1秒)。
在「classview」中雙擊ontimer函式,輸入要定時實現的**。本例子中為:
messagebeep(1000);;//每隔一秒發出通告聲
編譯並執行之,我們可以每隔一秒就聽到聲音。這正是我們在ontimer函式內要求執行的。
實際當中,我們可以將「messagebeep(1000);」換成任何我們想完成的任務,譬如定時存檔等。
第二種方案也利用timer資源,但卻是採用已經編寫好的**��我們可以加入乙個具有定時功能的元件至當前工程當中。這種方法特別適用於基於對話方塊的工程。具體步驟如下:
在resourceview中,雙擊idd_s2_dialog,顯示對話方塊,將其中的「to do:」改為「定時觸發演示的例子」,表明工程的作用。
右擊對話方塊編輯區,在彈出的右鍵選單中選擇「insert activex control」,從彈出的列表框中選擇「timer object」,確定後會在對話方塊內出現乙個timer物件。
我們右擊timer物件,從彈出的選單中選擇「properties」,接著選「all」選項卡,將其中的interval值設為5000,即每隔5秒發生一次timer事件。
回到對話方塊編輯介面,雙擊timer,產生乙個cs2dlg::ontimertimer1成員函式,接受預設值,並在函式實現部分輸入:
messagebox("定時觸發訊息框","定時演示" ,mb_ok);
編譯並執行此工程,將會在產生的對話方塊執行期間,每隔5秒彈出乙個訊息框。
同樣,我們可以以任何自己的**來替換5中的訊息框語句。詳細見附例s2。
在globals中增加一標誌變數「exitflag」,型別為bool。它被主線程用來判斷是否結束自身執行。
在startthread中輸入如下**:
afxbeginthread(staticthreadfunc,this);//建立並啟動執行緒
在staticthreadfunc中輸入如下**:
return threadfunc();//呼叫完成主要執行緒**的函式,注意一定要是static.
實現threadfunction:
int i;
i=5;//觸發5次
while(i--)
exitflag=false;//exitflag是一全域性變數,通知主線程結束執行。
return 0;
} 編譯並執行工程,將看不到應用程式視窗,但可以看到每隔5秒,桌面上出現乙個訊息框,5次後彈出主線程結束的訊息框。
以上即本人在學習當中解決 windows下實現定時觸發而採取的一些辦法,各自方法的特點也在介紹當中指出。希望所述能給大家一點幫助,更希望能得到大家的指正。如果您有什麼意見和設想,歡迎發e-mail給我([email protected])。
很早之前2023年的拙作,集在一起,免得自己都不清楚幹過什麼。
VC編寫DLL幾種方法的簡介
可欣 動態連線庫最大的特點就是能節省磁碟空間.當多個程序共享同乙個dll的時候,記憶體中只有乙個dll的 通過對映來使各個程序得以呼叫.1.用vc建立乙個win32 dll 我們利用vc編寫dll有幾種方法.如果用vc建立乙個win32 dll 工程.那這個工程就應該只匯出c 的類或全域性變數.和全...
VC中載入LIB檔案的三種方法
lib檔案直接加入到工程檔案列表中 在vc中開啟file view一頁,選中工程名,單擊滑鼠右鍵,然後選中 add files to project 選單,在彈出的檔案對話方塊中選中要加入dll的lib檔案即可。設定工程的 project settings來載入dll的lib檔案 開啟工程的 pro...
VC 獲取當前系統時間的幾種方法
方案 優點 僅使用c標準庫 缺點 只能精確到秒級 include include int main void 方案二 優點 能精確到毫秒級 缺點 使用了windows api include include int main void 方案三,優點 利用系統函式 include includeusi...