1.停止服务
  1.SetEvent(stopServiceEvent);
  设置stopServiceEvent为有信号状态
  2.monitor_sessions()中判断stopServiceEvent为有信号状态
  将ToCont = FALSE;
  退出循环并将hEvent(hEvent = CreateEvent(NULL, FALSE, FALSE, "Global\\SessionEventUltra");)
  设置为有信号状态
  3.创建进程的时候,创建了一个hShutdownEvent(hShutdownEvent = OpenEvent(EVENT_ALL_ACCESS, FALSE, "Global\\SessionEventUltra");)
  并起了一个定时器(2秒)实时监测hShutdownEvent是否有信号
  一旦判断hShutdownEvent有信号,则将fShutdownOrdered = true;
  4.fShutdownOrdered = true;
  则退出主进程的循环并等待线程退出
  5.各个线程的退出流程
    1.imp_desktop_thread
    fShutdownOrdered = true;
    menu->Shutdown(true);
    发送WM_CLOSE消息关闭菜单窗口
    关闭套接字
    2.vncClientThread
    线程循环函数:vncClientThread::run(void *arg)
    由于menu->Shutdown(true);关闭了套接字
    m_socket->ReadExact(...);返回FALSE
    退出循环并做清理工作
    if (m_client->m_updatethread)
    {
    m_client->m_updatethread->Kill();
    m_client->m_updatethread->join(NULL);
    }
    使vncClientUpdateThread退出
    3.vncClientUpdateThread退出
    由 m_client->m_updatethread->Kill();退出
    4.InitWindowThread(VncDestop)
    fShutdownOrdered = true; 销毁窗口并退出循环
    并SetEvent(trigger_events[5]);
    5.vncDesktopThread线程
    fShutdownOrdered = true;
    trigger_events[5]有信号,looping = false
    退出线程
6.主线程线程退出并清理
7.服务等待进程结束后,将服务停止并退出

 

2.Viewer端断开
  1.vncClientThread线程先退出
  void vncClientThread::run(void *arg)
  connected = false ,退出while (connected)循环
  清理线程
  if (m_client->m_updatethread) {
  m_client->m_updatethread->Kill();
  m_client->m_updatethread->join(NULL);
  }
  使m_updatethread退出循环
  m_server->RemoveClient(m_client->GetClientId());
  删除对应的连接
  delete m_desktop;
  StopInitWindowthread();
  在StopInitWindowthread中调用PostThreadMessage(pumpID, WM_QUIT, 0, 0);
  结束InitWindowThread线程
  SetEvent(trigger_events[5]);
  结束vncDesktopThread::run_undetached
  2.vncClientUpdateThread退出线程
  由 m_client->m_updatethread->Kill();退出
  3.InitWindowThread退出线程
  由Desktop析构函数调用StopInitWindowthread();
  4.vncDesktopThread
  由Desktop析构函数调用SetEvent(trigger_events[5])使线程退出
  线程退出,调用DoStopSvc停止服务
  5.imp_desktop_thread
  fShutdownOrdered = true;
  退出主线程

posted on 2013-08-05 12:02  无语东流  阅读(500)  评论(0编辑  收藏  举报