日期:2011-03-22 13:56:00 来源:本站整理
<b>用托管C++编写Windows服务</b>[VC/C++编程]
本文“<b>用托管C++编写Windows服务</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
多年以来,只要提到编写Windows服务,就会想到用Visual C++编写,同时,这也是此中一件C++程序员可以做,而VB程序员不可以做的事情.从前,我们只称其为"服务"或"NT服务",目前,它们被命名为"Windows服务",并且用VB.NET或C#也可以很简单地编写.
但是,假如你想用托管C++来编写呢?毕竟,大大都有经验的Visual C++程序员城市写过一两个服务,也会知道怎样完成一个近似的工程.假定你有一个必必要一向运行以供应服务的程序,且衔接着一些远程电脑,假如不想编写一本利用手册,奉告客户要记得在每次重启电脑之后重新运行此程序,你就应当使它成为一个服务;又假定你有一个用于删除过期数据库记录的便利保护工具,假如不想让管理员每周都亲手运行它一次,你就应当使它成为一个服务.看起来挺吸惹人的,那就让我们开始吧.
成立服务工程
以下要做的事情非常简单:翻开Visual Studio.NET,成立一个新的工程,在Visual C++工程下,挑选Windows服务(.NET).接下来,为这个服务取一个便利在电脑的服务列表中查找到的名字,在此为CGNotifier.向导会成立一个担当自System::ServiceProcess::ServiceBase的类并翻开计划视图,在此,你可放入一个计时器、一个数据库衔接,或其他不可见的组件.
让我们转到代码视图中看一下生成的代码,在此有一个构造函数与一个Dispose办法,这两个你都可以忽视,还有一对重载的办法:OnStart()和OnStop).在OnStart()中,可编写服务所需的代码.服务中一个重要的范围是利用"事件引发对象",比方System::IO::FileSystemWatcher的一个实例,普通可在OnStart()中成立这些对象,在本例中,你可为类加入事件办法,并处理在服务运行期间,由这些对象引发的事件.还有一种服务,它们对发生的事情不作反映,只在每天或每周的特按时间,履行一些特定的任务,这些服务平常普通处于休眠状况,但因为它们的工作状况是持续的,所以不该该终止它们,大概可以把它们放入一个循环中,在特定的时间查抄它们能否已被终止.
OnStart()办法是服务的开始之处,并且会在履行完后返回,在此办法完成之前,服务普通不会显示为"已启动".这就意味着,不能在OnStart()中放入一个常常利用的循环,或从别处直接调用的任何办法.最直接的办法是设置好一个单独的办法,并在一个新线程中调用它,以下所示:
private:
bool stopping;
int loopsleep; //毫秒
Threading::Thread* servicethread;
protected:
//设置好服务应做的工作
void OnStart(String* args[])
{
Threading::ThreadStart* threadStart =new Threading::ThreadStart(this,mainLoop);
servicethread = new Threading::Thread(threadStart);
servicethread->Start();
}
void mainLoop()
{
loopsleep = 1000; //毫秒
stopping = false;
while (!stopping)
{
Threading::Thread::Sleep(loopsleep);
}
}
这个循环将会一向运行,直到服务终止,因为OnStop()设置了终止标志:
void OnStop()
{
stopping = true;
}
假如你增添loopsleep值,则会在终止时,增添服务的呼应时间.
以上是“<b>用托管C++编写Windows服务</b>[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |
评论内容只代表网友观点,与本站立场无关!
评论摘要(共 0 条,得分 0 分,平均 0 分)
查看完整评论