最近在使用VS2010处理MFC多线程时,按照如下方式编写:
AfxBeginThread(threadFunction,NULL); //线程创建函数
UINT threadFunction(LPVOID para) //线程处理函数
{
//处理数据代码
return 0;
}
虽然上面的代码编译正常,但是在运行时总是碰到Create Instance failed这个运行错误。
在此之前我也使用上面的写法创建多线程处理,一直都很正常,为什么现在反而又出错了?后经查找资料,找到了问题的根源:
我在创建的线程中使用了ADO方式操作数据库,而这种操作方式需要使用COM组件。每个线程在使用COM组件之前都必须声明它的套间类型,即在每个线程使用组件对象之前都要调用CoInitialize,并在退出之前调用CoUninitialize。如果在线程中没有调用,对象根本就没有创建出来,继续运行就会访问0指针,就会非法操作了。
现在只需将线程处理函数改为如下形式即可解决问题:
UINT threadFunction(LPVOID para) //线程处理函数
{
CoInitialize(null)
//处理数据代码
CoUninitialize();
return 0;
}
说明:如果你的线程中没有使用COM组件,无需调用CoInitialize和CoUninitialize,线程也能正确运行。