MFC的窗口并不支持多线程的控制,因此试图多线程访问同一个窗口或控件是不推荐的。
1.我曾经试图在主线程创建一个对话框,然后启动另一个线程,在线程完成后关闭该对话框,结果在某些时候会出现奇怪的错误。因此,不要多个线程对同一个窗口操作。
2. 不要对各种设备或与设备相关的资源使用多线程操作。我在辅线程中打开了一个音频设备,然后在主线程中操作该设备,结果时常会出现一些错误。还有我在主线程创建了一个画图设备,然后试图在辅线程关闭该设备也会出现错误。
3. 如想在线程退出时通知主线程,又不想阻塞主线程的执行,可以通过发消息或在主线程设置定时器来检测辅线程的状态。WaitForSingleObject可以等待,但是会阻塞主线程,如果设置等待时间,则主线程需要等待辅线程的某些操作完成才能进行的操作会导致提前进行。这种情况下可以设置定时器,当检测到主线程完成后执行某些操作。
以上为自己在实践中获得的感想,也许有不妥的地方,仅作参考。