当前位置:七道奇文章资讯编程技术VC/C++编程
日期: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++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • <b>hosts是什么 hosts文件在什么位置 若何改正hosts</b>
  • <b>在 Windows 8 中手动安装语言包</b>
  • <b>五个常见 PHP数据库问题</b>
  • Windows中Alt键的12个高效快速的利用本领介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • <b>详解MySQL存储历程参数有三种范例(in、out、inout)</b>
  • <b>Win8系统恢复出来经典的开始菜单的办法</b>
  • <b>Win8系统花屏怎么办 Win8系统花屏的办理办法</b>
  • <b>Windows 7系统下无线网卡安装</b>
  • <b>为什么 Linux不需求碎片整理</b>
  • <b>Windows 8中删除账户的几种办法(图)</b>
  • <b>教你如安在win7下配置路由器</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .