總結(jié)C++開(kāi)發(fā)技巧
在進(jìn)行C++開(kāi)發(fā)時(shí),僅僅是它的語(yǔ)法、特性、標(biāo)準(zhǔn)類庫(kù)就已經(jīng)是一門(mén)非常高深的課程,所以在開(kāi)始學(xué)習(xí)的時(shí)候,一定要認(rèn)真仔細(xì),這樣才能及時(shí)準(zhǔn)確的編譯出自己想要的程序。
當(dāng)初我寫(xiě)***個(gè) NT 服務(wù)時(shí),我到 MSDN 上找例子。在那里我找到了一篇 Nigel Thompson 寫(xiě)的文章:“Creating a Simple Win32 Service in C++”,這篇文章附帶一個(gè) C++ 例子。雖然這篇文章很好地解釋了服務(wù)的開(kāi)發(fā)過(guò)程。
但是,我仍然感覺(jué)缺少我需要的重要信息。我想理解通過(guò)什么框架,調(diào)用什么函數(shù),以及何時(shí)調(diào)用,但 C++ 在這方面沒(méi)有讓我輕松多少。面向?qū)ο蟮姆椒ü倘环奖?,但由于用類?duì)底層 Win32 函數(shù)調(diào)用進(jìn)行了封裝。#t#
它不利于學(xué)習(xí)服務(wù)程序的基本知識(shí)。這就是為什么我覺(jué)得 C++更加適合于編寫(xiě)初級(jí)服務(wù)程序或者實(shí)現(xiàn)簡(jiǎn)單后臺(tái)任務(wù)的服務(wù)。在你對(duì)服務(wù)程序有了充分透徹的理解之后,用 C++ 編寫(xiě)才能游刃有余。當(dāng)我離開(kāi)原來(lái)的工作崗位,不得不向另一個(gè)人轉(zhuǎn)移我的知識(shí)的時(shí)候,利用我用 C++所寫(xiě)的例子就非常容易解釋 NT 服務(wù)之所以然。#t#
服務(wù)是一個(gè)運(yùn)行在后臺(tái)并實(shí)現(xiàn)勿需用戶交互的任務(wù)的控制臺(tái)程序。Windows NT/2000/XP 操作系統(tǒng)提供為服務(wù)程序提供專門(mén)的支持。人們可以用服務(wù)控制面板來(lái)配置安裝好的服務(wù)程序,也就是 Windows 2000/XP 控制面板|管理工具中的“服務(wù)”(或在“開(kāi)始”|“運(yùn)行”對(duì)話框中輸入 services.msc /s——譯者注)??梢詫?/P>
首先,包含所需的頭文件。例子要調(diào)用 Win32 函數(shù)(windows.h)和磁盤(pán)文件寫(xiě)入(stdio.h):
- #include
- #include
接著,定義兩個(gè)常量:
- #define SLEEP_TIME 5000
- #define LOGFILE "C:\\MyServices\\memstatus.txt"
SLEEP_TIME 指定兩次連續(xù)查詢可用內(nèi)存之間的毫秒間隔。在第二步中編寫(xiě)服務(wù)工作循環(huán)的時(shí)候要使用該常量。LOGFILE 定義日志文件的路徑,你將會(huì)用 WriteToLog 函數(shù)將內(nèi)存查詢的結(jié)果輸出到該文件,WriteToLog 函數(shù)定義如下:
- int WriteToLog(char* str)
- {
- FILE* log;
- log = fopen(LOGFILE, "a+");
- if (log == NULL)
- return -1;
- fprintf(log, "%s\n", str);
- fclose(log);
- return 0;
- }
聲明幾個(gè)全局變量,C++ 以便在程序的多個(gè)函數(shù)之間共享它們值。