更新时间:2015-10-14 18:17:37浏览次数:1+次
半夜修软件的水印代码,真无语啊。我硬是改透了代码,查遍了百度,就是没辙。突然,我想到了用UI线程来启动水印代码,就朝那方面着手。但发现自己对那方面的理解还是有点模糊,就深造了下去。突然有点理解了UI线程的工作机制。我们看UI线程的调用函数:
CWinThread* AfxBeginThread(
CRuntimeClass* pThreadClass,
int nPriority = THREAD_PRIORITY_NORMAL,
UINT nStackSize = 0,
DWORD dwCreateFlags = 0,
LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL
);
第一个参数是啥?就是线程类-也就是我们基于CWinThread类创建的线程类来启动UI线程,请看《worker线程与UI线程的学习》里面有UI线程与worker线程的介绍。具体的事例程序请看《实现界面画面启动程序》我们的新建的线程类是基于线程类,而我们又必须有窗口来维护我们的启动界面,因此我们必需一个窗口类来支持。我们创建了一个窗口类,作为系统启动界面。这就是worker线程与UI线程最大的区别,UI线程需要窗口。Win32 说明文件一再强调线程分为 GUI 线程和 worker 线程两种。GUI 线程负责建造窗口以及处理主消息循环。 worker 负责执行纯粹运算工作,如重新计算或重新编页等等,它们会导致主线程的消息队列失去反应。一般而言, GUI线程绝不会去做那些不能够马上完成的工作。GUI 线程的定义是:拥有消息队列的线程。任何一个特定窗口的消息总是被产生这一窗口的线程抓到并处理。所有对此窗口的改变也都应该由该线程完成。
相关资讯