摘要:
对于大多数mfc对象,请不要在线程间传递它们,不管是栈上的还是堆上的!原因如下: 1、 mfc的大多数类不是线程安全的,调用传入对象的成员函数可能不会报错,但是未必能达到程序预定的功能! 2、 mfc与界面有关的类,其大多数成员方法都是通过sendmessage实现的,如果消息处理函数本身不是线程安全的,你从工作线程中调用这些方法迟早会同你界面线程的用户消息响应发生冲突; 3、对于CWnd相关的类,即使传入窗口句柄,有时操作也会引起异常(ASSERT异常):通过句柄获取窗口对象并且调用其成员函数或者成员变量!因为该对象是临时对象,访问其成员变量没有意义,访问其成员函数可能会抛出异常! 不能在线 阅读全文
摘要:
MFC的多线程函数必须声明为静态的或者是全局函数(不同的在于全局函数不能访问类的私有静态成员,而静态类函数可以):但这样的线程函数只能访问静态的成员变量,要实现访问类的其他成员,可以这样实现:1)全局函数。如 UINT MyThread(LPVOID p)2)类的静态成员函数。如 static UINT MyView::MyThread(LPVOID p) 线程函数是可以带参数的,比如static__stdcallworkthread(LPVOIDlpParam)你可以在创建这个线程的时候,把对象指针传递到lpParam,然后使用这个指针就可以在线程函数里调用非静态成员变量... 阅读全文