创建用户接口线程

用户接口线程用于处理用户的输入和输出,并对之作出响应,它的执行是独立于应用程序的其它部分的。最主要的应用程序线程在程序开始的时候已经为你创建好了,如果你还需要另外的用户接口线程,本文或许能够对你提供一点帮助。

第一件事情是要从CWinThread派生出一个类,你必须使用DECLARE_DYNCREATE和IMPLEMENT_DYNCREATE宏来实现它。这个新类必须重载一些函数,下面列出这些函数以及相应的功能:

  • ExitInstance:在线程结束时负责进行清除工作
  • InitInstance:初始化对象实例,它必须被重载
  • OnIdle:执行线程特定的空闲时操作,不一定非要重载,可以用基类的
  • PreTranslateMessage:在消息被传送到TranslateMessage和DispatchMessage之前进行检查
  • ProcessWndProcException:获得由线程消息和命令句柄产生的错误中断
  • Run:它就是线程的执行体函数,它倒是很少被重载

MFC提供两个AfxBeginThread,一个用于产生工作线程,一个用于产生用户接口线程,如果你需要产生用户接口线程,就要提供下面的参数:

  • CWinThread派生出类的RUNTIME_CLASS
  • (可选的)希望的优先级
  • (可选的)希望的堆栈段大小
  • (可选的)标明是不是创建进程时就挂起,如果是则指定为CREATE_SUSPENDED
  • (可选的)希望的安全属性

AfxBeginThread函数本身为你做了大量的工作,它创建了对象的一个新类,并根据你提供的信息对它进行了初始化,然后它又调用CWinThread::CreateThread开始线程,如果产生错误它会进行相应的处理,保证干干净净。