最近在使用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,线程也能正确运行。