青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

#ant

The dreams in which I'm dying are the best I've ever had...

Win32 Service的簡(jiǎn)單封裝

前段時(shí)間學(xué)習(xí)Windows程序設(shè)計(jì),剛好學(xué)到Win32 Service,于是寫(xiě)了兩個(gè)簡(jiǎn)單的類:BaseService和ServiceCtrl。雖然功能比較簡(jiǎn)單,但是也能適用于大多數(shù)情況。下面介紹一下簡(jiǎn)單用法,如果你剛好需要寫(xiě)一些簡(jiǎn)單的服務(wù)程序,這兩個(gè)類也許能派上用場(chǎng):

1. BaseService
BaseService.h

 1  #ifndef BASE_SERVICE_H
 2 
#define BASE_SERVICE_H
 3 

 4 class  BaseService {
 5 public
:
 6 
    explicit BaseService(LPCTSTR szServiceName,
 7                 DWORD dwServiceType =
 SERVICE_WIN32_OWN_PROCESS,
 8                 DWORD dwStartType =
 SERVICE_AUTO_START);
 9     virtual ~
BaseService() {}
10     bool ParseStandardArgs(int argc, char*
 argv[]);
11 
    bool IsInstalled();
12 
    bool Install();
13 
    bool Uninstall();
14 
    bool Start();
15 private
:
16     virtual void Run() = 0
;
17     virtual bool OnInitialize() { return true
; }
18     virtual void
 OnStop() {}
19     virtual void
 OnPause() {}
20     virtual void
 OnContinue() {}
21     virtual void
 OnInterrogate() {}
22     virtual void
 OnShutdown() {}
23     virtual void
 OnUserControl(DWORD dwControl) {}
24 
    ...
25 
};
26 

27 #endif/*BASE_SERVICE_H*/

要實(shí)現(xiàn)自己的服務(wù)類只需從BaseService繼承并且Override相關(guān)的virtual函數(shù)即可,下面示范一個(gè)BeepService類,該服務(wù)只是簡(jiǎn)單地每隔2秒beep一下,為了簡(jiǎn)單所有代碼均放在.h文件中:
BeepService.h

 1  #ifndef BEEP_SERVICE_H
 2 
#define BEEP_SERVICE_H
 3 

 4 #include "BaseService.h"
 5 
 6 class BeepService : public  BaseService {
 7 public
:
 8 
    BeepService(LPCTSTR szServiceName)
 9 
        :BaseService(szServiceName)
10         ,m_bPaused(false
)
11         ,m_bRunning(false
) {}
12 

13     virtual void OnStop() { m_bRunning = false ; }
14     virtual void OnPause() { m_bPaused = true
; }
15     virtual void OnContinue() { m_bPaused = false
; }
16     virtual void
 Run() {
17         m_bRunning = true
;
18         while
 (m_bRunning) {
19             if (!
m_bPaused)
20                 Beep(800800
);
21             Sleep(2000
);
22 
        }
23 
    }
24 private
:
25     volatile
 bool m_bPaused;
26     volatile
 bool m_bRunning;
27 
};
28 

29 #endif/*BEEP_SERVICE_H*/

通常來(lái)說(shuō)只須要Override上面的4個(gè)virtual函數(shù)就OK了:
Run()中進(jìn)行實(shí)際的工作,OnStop(),OnPause(),OnContinue()則是為了響應(yīng)Service Control Manager的控制。

test.cpp

 1 #include <windows.h>
 2 #include <tchar.h>
 3 #include <stdio.h>
 4 #include "BeepService.h"
 5 
 6 int main(int argc, char * argv[]) {
 7 

 8     BeepService beepService(_T("BeepService" ));
 9     if (!
beepService.ParseStandardArgs(argc, argv)) {
10         if
 (beepService.IsInstalled()) {
11             if (!
beepService.Start())
12                 printf("The service can not run from command line.\n"
);
13         } else
 {
14             printf("The service is not installed, "

15                 "use \"%-i\" to install.\n", argv[0 ]);
16 
        }
17 
    }
18     return 0
;
19 }

假設(shè)編譯后生成的exe文件為beep.exe,則在命令行中可以如下使用:
(1). beep -i    安裝service(安裝以后系統(tǒng)運(yùn)行時(shí)會(huì)自動(dòng)啟動(dòng))
(2). beep -u   卸載service(如果service正在運(yùn)行,則先停止service再卸載)
BaseServiced 的ParseStandardArgs正是用來(lái)解析上述兩個(gè)命令。

2. ServiceCtrl
雖然Windows自帶的Service Control Manager可以控制服務(wù)程序,但是很多時(shí)候我們都需要用代碼控制,這就用到ServiceCtrl類,該類的接口如下:
ServiceCtrl.h

 1  #ifndef SERVICE_CTRL_H
 2 
#define SERVICE_CTRL_H
 3 

 4 class  ServiceCtrl {
 5 public
:
 6 
    ServiceCtrl(LPCTSTR szServiceName);
 7     ~
ServiceCtrl();
 8 
    bool Start();
 9 
    bool Pause();
10 
    bool Continue();
11 
    bool Stop();
12 
    bool Interrogate();
13 
    bool UserControl(DWORD dwControl);
14     DWORD State() const
;
15 
    ...
16 
};
17 

18 #endif/*SERVICE_CTRL_H*/

接口比較直觀沒(méi)什么好說(shuō)的,看下面的示例代碼:
test.cpp

 1 #include <windows.h>
 2 #include <tchar.h>
 3 #include <stdio.h>
 4 #include <exception>
 5 #include "BeepService.h"
 6 #include "ServiceCtrl.h"
 7 
 8 int main(int argc, char * argv[]) {
 9 

10     try  {
11         ServiceCtrl servCtrl(_T("BeepService"
));
12         if (servCtrl.State() !=
 SERVICE_STOPPED) {
13             printf("Service already started.\n"
);
14         } else
 {
15 
            servCtrl.Start();
16             printf("Start.\n"
);
17             Sleep(6000
);
18 
            servCtrl.Pause();
19             printf("Pause.\n"
);
20             Sleep(6000
);
21 
            servCtrl.Continue();
22             printf("Continue.\n"
);
23             Sleep(6000
);
24 
            servCtrl.Stop();
25             printf("Stop.\n"
);
26 
        }
27     } catch (std::exception &
e) {
28         printf("%s\n"
, e.what());
29 
    }
30     return 0
;
31 }

源代碼:點(diǎn)擊下載

posted on 2007-09-24 13:01 螞蟻終結(jié)者 閱讀(3761) 評(píng)論(5)  編輯 收藏 引用 所屬分類: C++

Feedback

# re: Win32 Service的簡(jiǎn)單封裝 2007-09-24 13:28 Minidx全文檢索

不錯(cuò),雖然簡(jiǎn)單,卻很實(shí)用!!  回復(fù)  更多評(píng)論   

# re: Win32 Service的簡(jiǎn)單封裝 2007-09-24 14:05 iterator

簡(jiǎn)單實(shí)用,收下了!  回復(fù)  更多評(píng)論   

# re: Win32 Service的簡(jiǎn)單封裝[未登錄](méi) 2007-09-24 17:43 exile

不錯(cuò)不錯(cuò)  回復(fù)  更多評(píng)論   

# re: Win32 Service的簡(jiǎn)單封裝[未登錄](méi) 2007-09-24 18:20 eXile

剛準(zhǔn)備自己寫(xiě)一個(gè)呢, 真是超爽啊, 太謝謝了....  回復(fù)  更多評(píng)論   

# re: Win32 Service的簡(jiǎn)單封裝 2007-09-25 15:17 夢(mèng)在天涯

不錯(cuò),很強(qiáng),我看過(guò)C#些的,她有wizard比較簡(jiǎn)單1  回復(fù)  更多評(píng)論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲国产另类精品专区 | 欧美色欧美亚洲高清在线视频| 国产综合18久久久久久| 久久久九九九九| 亚洲尤物在线视频观看| 亚洲激情小视频| 欧美视频免费| 久久精品一区| 欧美福利一区| 亚洲欧美精品suv| 久久久99国产精品免费| 亚洲日韩第九十九页| 一本久久青青| 狠狠干综合网| 亚洲精品永久免费| 国产色视频一区| 亚洲二区在线| 国产日韩欧美在线播放| 亚洲免费在线观看| 国产精品亚洲美女av网站| 亚洲欧洲av一区二区三区久久| 久久aⅴ国产欧美74aaa| 亚洲美女91| 亚洲性感激情| 久久九九久精品国产免费直播| 日韩天堂av| 久久精品视频网| 亚洲一区二区精品在线| 蜜臀99久久精品久久久久久软件| 亚洲欧美视频| 欧美激情欧美狂野欧美精品| 久久国产一区二区三区| 欧美日本高清视频| 美日韩免费视频| 国产欧美在线看| 日韩视频在线免费观看| 亚洲国产成人在线| 欧美一区二区三区男人的天堂| 亚洲最新在线| 玖玖视频精品| 麻豆91精品91久久久的内涵| 国产精品久久一级| 亚洲国产一区二区在线| 久久本道综合色狠狠五月| 亚洲免费一在线| 欧美色道久久88综合亚洲精品| 亚洲黑丝一区二区| 亚洲三级观看| 久久一区二区三区av| 久久久亚洲国产天美传媒修理工| 国产精品不卡在线| aa级大片欧美三级| 在线亚洲精品| 欧美三级午夜理伦三级中文幕 | 巨胸喷奶水www久久久免费动漫| 国产精品国产一区二区| 亚洲免费播放| 亚洲一区二区精品视频| 欧美日韩无遮挡| 在线观看亚洲视频啊啊啊啊| 欧美中文字幕精品| 麻豆精品视频| 亚洲电影在线观看| 狂野欧美一区| 亚洲欧洲一区二区在线播放| 亚洲精品资源美女情侣酒店| 欧美激情第一页xxx| 亚洲青涩在线| 亚洲午夜久久久| 国产精品日本欧美一区二区三区| 99在线精品观看| 羞羞视频在线观看欧美| 国产亚洲欧美aaaa| 久久久中精品2020中文| 亚洲电影在线看| 99国产精品99久久久久久| 欧美日韩18| 亚洲欧美久久久久一区二区三区| 久久久99国产精品免费| 欧美与黑人午夜性猛交久久久| 久久一区国产| 亚洲美女精品久久| 国产精品久久一区主播| 亚洲欧美清纯在线制服| 精品不卡一区| 欧美有码在线视频| 亚洲国产成人91精品| 亚洲一级网站| 国产一区二区三区四区老人| 鲁大师成人一区二区三区| 夜夜嗨av一区二区三区网页| 性欧美大战久久久久久久免费观看| 国产一区二区三区在线观看精品| 久久精品伊人| 一本色道久久综合精品竹菊 | 久久久久99| 日韩午夜激情av| 国产女人aaa级久久久级| 欧美在线观看视频一区二区| 亚洲国产精品成人精品| 国产精品免费一区二区三区观看| 久久久久久久999| 日韩视频在线观看国产| 麻豆成人在线播放| 午夜精品一区二区在线观看| 亚洲韩日在线| 国产一区二区在线免费观看| 欧美激情导航| 久久精视频免费在线久久完整在线看| 亚洲精品视频中文字幕| 免费看成人av| 欧美中文字幕视频| 亚洲婷婷综合久久一本伊一区| 在线成人国产| 国产一二精品视频| 国产精品日韩欧美一区| 欧美喷水视频| 欧美激情a∨在线视频播放| 久久精品女人天堂| 香蕉久久夜色精品国产使用方法| 亚洲电影专区| 黄色日韩网站| 国产一区二区高清视频| 国产精品大全| 欧美视频中文一区二区三区在线观看| 久久尤物视频| 久久久久久亚洲综合影院红桃| 亚洲女同在线| 亚洲一区精品在线| 亚洲天堂av图片| 中文国产成人精品| 一本久道综合久久精品| 亚洲精品国久久99热| 亚洲国产精品久久久久婷婷老年| 欧美成人69av| 欧美成人午夜影院| 欧美高清hd18日本| 亚洲国产精品成人综合色在线婷婷 | 欧美日韩免费高清一区色橹橹| 欧美精品久久天天躁| 欧美激情一区二区三区在线视频| 久久久免费观看视频| 久久成人综合网| 久久久综合激的五月天| 久久精品国产清高在天天线| 久久久久久一区二区| 久久久一区二区三区| 欧美aⅴ一区二区三区视频| 欧美高清视频在线 | 美女日韩欧美| 亚洲电影下载| 一本色道88久久加勒比精品| 亚洲一区二区三区中文字幕| 亚洲欧美视频在线| 久久蜜桃av一区精品变态类天堂| 模特精品在线| 在线亚洲精品| 亚洲欧美国产精品桃花| 欧美中文字幕在线| 美女尤物久久精品| 亚洲国产一成人久久精品| 日韩系列欧美系列| 99精品视频免费全部在线| 国产精品99久久久久久白浆小说| 性xx色xx综合久久久xx| 麻豆精品在线播放| 亚洲美女色禁图| 性8sex亚洲区入口| 蘑菇福利视频一区播放| 欧美性猛交xxxx乱大交蜜桃| 国产丝袜一区二区| 亚洲美女在线视频| 欧美一区二区视频在线| 欧美激情亚洲视频| 亚洲一区二区三区四区中文| 久久婷婷国产综合精品青草| 欧美天天综合网| 亚洲第一福利视频| 午夜欧美不卡精品aaaaa| 美女久久一区| 亚洲欧美精品| 欧美日韩国产丝袜另类| 国内精品久久久| 亚洲综合大片69999| 欧美激情久久久久| 性色av一区二区三区| 欧美日韩精品是欧美日韩精品| 韩国av一区| 欧美无乱码久久久免费午夜一区 | 狠狠色丁香久久综合频道| 中文久久精品| 亚洲高清在线观看| 欧美中文字幕第一页| 国产精品久久午夜夜伦鲁鲁| 亚洲精品在线免费观看视频| 老司机亚洲精品| 亚洲欧洲av一区二区三区久久| 欧美日本国产视频| 亚洲精品久久久久久一区二区 | 亚洲人成在线观看|