此线程的核心函数是run_undetached(),我们从这个函数开始阅读。
该函数的核心功能是:
(1) 该线程调用vncDesktop::Startup()进行所有的初始化工作:
1. 设置象素格式和位图信息
2. 设置各种系统 Hook, 添加系统挂钩,包括屏幕, 键盘,鼠标。
3. 设置一个定时器来处理拉模式(polling mode),每一秒钟执行一次. 这样 TriggerUpdate 例程每秒钟被执行一次.
(2) 设置处理剪切板消息
(3) 创建一个缓存区域对象。所有的区域更新消息都被缓存在该对象中,仅当 TriggerUpdate被触发时,才把这些消息传给所有的客户端。
我们来看代码:
void *
vncDesktopThread::run_undetached(void *arg)
{
if(Q_init() == NULL) //debug by qz,初始化工作。
return NULL;
rfb::SimpleUpdateTracker clipped_updates;
rfb::ClippedUpdateTracker updates(clipped_updates, m_desktop->m_Cliprect);
Q_process_desktop(); //debug by qz,处理桌面信息
while (looping && !fShutdownOrdered)
{
result=WaitForMultipleObjects(6,m_desktop->trigger_events,FALSE,waittime);//debug by qz,等待其中一个事件发送信