WEB开发网
开发学院软件开发VC 用 C++ 创建简单的 Win32 服务程序 阅读

用 C++ 创建简单的 Win32 服务程序

 2006-07-20 11:41:12 来源:WEB开发网   
核心提示: 运行服务当 Run 函数被调用时将执行服务的主体代码,本文例子的这部分很简单:void CMyService::Run(){while (m_bIsRunning) {// Sleep for a while.DebugMsg("My service is sleeping (%

运行服务

当 Run 函数被调用时将执行服务的主体代码。本文例子的这部分很简单:

void CMyService::Run()
{
  while (m_bIsRunning) {
  // Sleep for a while.
    DebugMsg("My service is sleeping (%lu)...", m_iState);
    Sleep(1000);
  // Update the current state.
  m_iState += m_iIncParam;
  }
}    

注意,只要服务不终止,这个函数就不会退出。当有终止服务的请求时,CNTService::m_bIsRunning 标志被置成 FALSE。如果在服务终止时,你要实现清除操作,那么你还可以改写 OnStop 和/或 OnShutdown。

响应控制请求

你可以用任何适合的方式与服务通讯——命名管道,思想交流,便条等等——对于一些简单的请求,用系统函数 ControlService 很容易实现。CNTService 提供了一个处理器专门用于通过 ControlService 函数发送的非标准消息(也就是用户发送的消息)。本文例子用单一消息在注册表中保存当前服务的状态,以便其它应用程序能看到它。我不建议用这种方法来监控服务,因为它不是最佳方法,这只是比较容易编码实现而已。ControlService 所能处理的用户消息必须在 128 到 255 这个范围。我定义了一个常量 SERVICE_CONTROL_USER,128 作为基值。范围内的用户消息被发送到 CNTService:: OnUserControl,在例子服务中,处理此消息的细节如下:

BOOL CMyService::OnUserControl(DWORD dwOpcode)
{
  switch (dwOpcode) {
  case SERVICE_CONTROL_USER + 0:
    // Save the current status in the registry.
    SaveStatus();
    return TRUE;
  default:
    break;
  }
  return FALSE;  // say not handled
}    

SaveStatus 是一个局部函数,用来在注册表中存储服务状态。

上一页  4 5 6 7 8 9 10  下一页

Tags:创建 简单 Win

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接