当前位置:七道奇文章资讯编程技术VC/C++编程
日期:2011-03-22 13:55:00  来源:本站整理

<b>Windows服务编写原理及探究(4)</b>[VC/C++编程]

赞助商链接



  本文“<b>Windows服务编写原理及探究(4)</b>[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

(四)一些问题的谈论

前面几章的内容都是服务的一些通用的编写原理,但里面隐含着一些问题,编写简单的服务时看不出来,但碰到复杂的利用就会呈现一些问题,所以本章就是用来解析、办理这些问题的,实用于高级利用的开辟人员.我这一章的内容都是经过实行得到的,很有实际意义.

我在第一章里面就说过,是由一个服务的主线程履行CtrlHandler函数,它将收到各种掌握号令,但是真正处理号令,履行操作的是ServiceMain的线程.目前,当一个SERVICE_CONTROL_STOP到达之后,你作为一个开辟者,要怎样终止这个服务?在我看过的一些源代码里,大部份只是简单的调用TerminateThread函数去强行杀掉服务进程.但应当稍稍有点线程编程的常识就应当知道TerminateThread函数是可用的调用中最为糟糕的一个,服务线程将得不到任何机会去做应当的清理工作,诸如排除内存、释放核心对象,Dlls也得不到任何线程已经被毁的告诉.

所以终止服务的得当办法是以某种方法激活服务线程,让它终止持续供应服务功效,然后履行完当前操作和排除工作后返回.这就表示你必须在CtrlHandler线程和ServiceMain线程之间履行得当的线程通信.目前已知的最好的内部线程通信机制是I/O Completion Port(I/O 完成端口),假定你编写的是一个大型的服务,需求同时处理为数众多的恳求,并且运行在多处理器系统上面,这个模子便可以供应最佳的系统性能.但也正因为它的复杂性较高,在小规模的利用上面不值得耗费很多的时间和精神,这时作为开辟者可以得当的选取别的的通信方法,诸如异步历程调用行列、套接字和窗口消息,以适应实际情形.

开辟服务时的别的一个重要问题就是调用SetServiceStatus函数时的全部状况报告问题.很多的服务开辟者为了在什么时刻调用SetServiceStatus的问题而常常产生争辩,普通举荐的办法就是:先调用SetServiceStatus函数,报告SERVICE_STOP_PENDING状况,然后将掌握代码传给服务线程大概再成立一个新的线程,让它去持续履行操作,当该线程行将履行完操作之前,再由它将服务的状况设置成SERVICE_STOPPED,然后服务恰好终止.


  以上是“<b>Windows服务编写原理及探究(4)</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 .