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

#ant

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

Win32 Service的簡單封裝

前段時間學習Windows程序設計,剛好學到Win32 Service,于是寫了兩個簡單的類:BaseService和ServiceCtrl。雖然功能比較簡單,但是也能適用于大多數情況。下面介紹一下簡單用法,如果你剛好需要寫一些簡單的服務程序,這兩個類也許能派上用場:

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*/

要實現自己的服務類只需從BaseService繼承并且Override相關的virtual函數即可,下面示范一個BeepService類,該服務只是簡單地每隔2秒beep一下,為了簡單所有代碼均放在.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*/

通常來說只須要Override上面的4個virtual函數就OK了:
Run()中進行實際的工作,OnStop(),OnPause(),OnContinue()則是為了響應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 }

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

2. ServiceCtrl
雖然Windows自帶的Service Control Manager可以控制服務程序,但是很多時候我們都需要用代碼控制,這就用到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*/

接口比較直觀沒什么好說的,看下面的示例代碼:
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 }

源代碼:點擊下載

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

Feedback

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

不錯,雖然簡單,卻很實用?。?nbsp; 回復  更多評論   

# re: Win32 Service的簡單封裝 2007-09-24 14:05 iterator

簡單實用,收下了!  回復  更多評論   

# re: Win32 Service的簡單封裝[未登錄] 2007-09-24 17:43 exile

不錯不錯  回復  更多評論   

# re: Win32 Service的簡單封裝[未登錄] 2007-09-24 18:20 eXile

剛準備自己寫一個呢, 真是超爽啊, 太謝謝了....  回復  更多評論   

# re: Win32 Service的簡單封裝 2007-09-25 15:17 夢在天涯

不錯,很強,我看過C#些的,她有wizard比較簡單1  回復  更多評論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲在线成人| 欧美日韩精品二区| 欧美高清在线视频观看不卡| 亚洲欧美怡红院| 午夜在线视频观看日韩17c| 午夜精品剧场| 欧美专区日韩专区| 米奇777在线欧美播放| 欧美大片免费| 日韩午夜电影| 午夜精品一区二区三区在线播放| 久久国产手机看片| 欧美国产一区视频在线观看| 欧美视频一区二区三区…| 国产欧美精品一区二区三区介绍 | 亚洲一区二区三区视频播放| 亚洲激情视频在线播放| 亚洲视频在线观看网站| 性色av一区二区三区在线观看| 久久成人精品视频| 亚洲国产小视频| 最新国产拍偷乱拍精品 | 欧美成人69| 国产精品欧美激情| 亚洲国产欧美不卡在线观看| 亚洲午夜电影| 免费欧美日韩国产三级电影| 日韩一级视频免费观看在线| 久久久精品tv| 国产午夜精品美女视频明星a级| 亚洲欧美日韩国产成人| 久久久久亚洲综合| 国产精品成av人在线视午夜片| 国内一区二区在线视频观看| 一本到高清视频免费精品| 欧美综合国产| 一本不卡影院| 免费人成网站在线观看欧美高清| 国产美女扒开尿口久久久| 日韩午夜黄色| 久久女同互慰一区二区三区| 亚洲视频在线观看一区| 欧美精品一区二区三区在线播放 | 欧美成人一区在线| 亚洲欧美日韩一区二区三区在线观看| 久久婷婷久久| 国内精品久久久久久久果冻传媒| 亚洲一区二区欧美| 亚洲精品国产精品国自产观看浪潮 | 农村妇女精品| 国产在线视频欧美一区二区三区| 亚洲一区观看| 亚洲精品日本| 欧美69wwwcom| 亚洲第一区在线| 麻豆精品视频在线观看| 久久精品女人的天堂av| 国产亚洲精品aa| 久久久久国产精品一区| 亚洲一区二区三区涩| 欧美视频三区在线播放| 免费视频亚洲| 亚洲国产精品久久久久秋霞不卡 | 国产精品亚洲产品| 欧美一区二区福利在线| 亚洲一区二区三区影院| 国产精品天美传媒入口| 午夜精品久久久久久久蜜桃app| 亚洲色诱最新| 国产精品夜夜夜一区二区三区尤| 亚洲永久免费精品| 亚洲欧美精品在线观看| 国产手机视频一区二区| 裸体女人亚洲精品一区| 免费看成人av| 亚洲一区图片| 欧美伊人影院| 久久久久9999亚洲精品| 亚洲国产精品久久久| 欧美韩国在线| 亚洲一区在线直播| 午夜精品av| 在线精品国精品国产尤物884a| 欧美a级在线| 欧美另类人妖| 久久av资源网| 久热精品视频在线观看| 一区二区三区不卡视频在线观看 | 亚洲国产精品久久久久婷婷884| 欧美激情国产高清| 亚洲一区二三| 久久嫩草精品久久久精品| 亚洲裸体视频| 午夜久久黄色| 日韩亚洲一区在线播放| 亚洲欧美制服另类日韩| 亚洲经典在线看| 亚洲一区二区黄色| 亚洲黄色尤物视频| 亚洲免费网站| 亚洲美女免费视频| 亚洲在线观看免费视频| 亚洲激情欧美| 欧美在线视频a| 亚洲视频在线一区观看| 久久久久久久999精品视频| 一区二区动漫| 亚洲欧美日韩综合国产aⅴ| 亚洲精品日韩在线观看| 欧美与黑人午夜性猛交久久久| 日韩五码在线| 久久另类ts人妖一区二区| 亚洲伊人网站| 久热精品视频在线观看| 欧美在线免费视屏| 欧美日韩美女在线观看| 欧美va天堂| 国产在线日韩| 亚洲一区二区三区四区中文| 一区二区日韩精品| 欧美激情国产日韩| 噜噜噜噜噜久久久久久91| 国产麻豆9l精品三级站| 亚洲午夜激情网页| 亚洲一二三区精品| 欧美精品在线一区| 亚洲欧洲日本一区二区三区| 亚洲国产mv| 久久男人av资源网站| 久久成人综合视频| 亚洲另类自拍| 亚洲精品视频在线观看免费| 久久久国产视频91| 老司机免费视频一区二区| 国产一区二区黄色| 午夜精品久久久久久久99水蜜桃| 亚洲欧美国产va在线影院| 欧美日韩三级在线| 在线视频欧美一区| 欧美一区二区三区在线视频| 国产精品久久久久高潮| 欧美亚洲免费高清在线观看| 一本不卡影院| 一本色道久久加勒比精品| 免费日韩av电影| 欧美.www| 亚洲人成7777| 欧美日韩国产bt| 一区二区三区回区在观看免费视频| 亚洲精品免费看| 欧美日韩成人综合天天影院| 亚洲精品国产精品乱码不99| 亚洲视频你懂的| 国产伦精品免费视频| 午夜视频在线观看一区二区| 久久综合久久久| 亚洲激情社区| 国产精品成人免费视频| 欧美一区二区三区四区高清| 免费不卡欧美自拍视频| 亚洲靠逼com| 国产精品国产一区二区| 欧美影院久久久| 亚洲第一精品久久忘忧草社区| 日韩亚洲欧美中文三级| 国产精品久久久久秋霞鲁丝| 久久国产精品黑丝| 亚洲欧洲精品一区二区三区不卡 | 久久综合久久综合久久| 亚洲国产成人精品久久| 欧美韩日一区二区| 亚洲少妇在线| 欧美成人情趣视频| 亚洲欧美国产日韩天堂区| 狠狠色狠狠色综合日日五| 欧美日韩激情小视频| 久久久久久穴| 亚洲视频国产视频| 欧美成人影音| 欧美一区亚洲二区| 亚洲精品偷拍| 国产一区二区0| 欧美午夜精品理论片a级按摩| 久久久久久久一区| 亚洲香蕉在线观看| 亚洲国产精品一区| 久久久久亚洲综合| 亚洲欧美中文字幕| 在线亚洲一区| 亚洲成人在线免费| 国产精品一二三视频| 欧美日韩国产综合视频在线观看| 久久久午夜电影| 香蕉久久精品日日躁夜夜躁| 日韩亚洲欧美在线观看| 欧美大学生性色视频| 久久久噜噜噜久噜久久| 香蕉亚洲视频| 亚洲制服少妇| 亚洲视频欧美视频|