因为要执行大数据量查询及插入操作,我将数据库部分放在线程里,使得用户界面可以及时反映当前操作情况。在线程里使用互斥量控制使得每次只有一个线程运行。但是我发现执行完第一个线程后就出现异常,并且catch捕获不到。
我在每个线程里单独定义变量 并用CreateInstance初始化也不行。请大虾分析一下原因。
我在每个线程里单独定义变量 并用CreateInstance初始化也不行。请大虾分析一下原因。
解决方案 »
- 请问在向MFC添加了一个类.cpp和.h文件之后,在.cpp中搜索类,出现“未定义符号”!!!!
- ListCtrl中如何灰掉一列,不能修改?
- API如何实现按钮悬浮提示的功能
- 急啊,怎样进行教学评估系统的数据表分析,还有,统计学生打分时是怎样对打的分进行处理的呢?
- MFC container的保存问题
- 求达人帮忙解决BCG安装后向导显示的问题!!!
- http协议发送get请求问题?
- 关于开发一个能保存并管理网页的程序的问题!
- 如何知道一个声明为inline的函数在编译时真的是以inline方式编译的?
- 怎么判断一个文本文件结束?
- 怎样在VC中用messagebox输出整数,浮点数的值呢?
- 请问一下怎么获取COleDateTime类型的当前日期呢?
每次运行一个新的现成记得AfxOleInit();
该线程在一个循环里被调用,有几个表就调用几次,用互斥量控制.互斥量Mutex_DB已在主线程里建立
线程代码如下:
_RecordsetPtr MySet_SRC;
_RecordsetPtr MySet_TAR;
_ConnectionPtr g_ptrDatabase_SRC;
_ConnectionPtr g_ptrDatabase_TAR; WaitForSingleObject(Mutex_DB,INFINITE);
try
{
::CoInitialize(NULL);
g_ptrDatabase_SRC.CreateInstance(__uuidof(Connection));
g_ptrDatabase_TAR.CreateInstance(__uuidof(Connection));
MySet_SRC.CreateInstance(__uuidof(Recordset));
MySet_TAR.CreateInstance(__uuidof(Recordset));
g_ptrDatabase_SRC->Open(_bstr_t(sConnSRC),"","",adModeUnknown);
g_ptrDatabase_TAR->Open(_bstr_t(sConnTAR),"","",adModeUnknown); .......
::CoUninitialize();
ReleaseMutex(Mutex_DB); }
catch(_com_error &e)
{.....}
_RecordsetPtr MySet_TAR;
_ConnectionPtr g_ptrDatabase_SRC;
_ConnectionPtr g_ptrDatabase_TAR;
是在线程里定义的.
我现在太忙了,过几天我会再试一下.谢谢各位关心,请保持关注
异常不是ado造成的,加个catch(...)试试
VC打Pack了吗,早期的VC就是catch不到东西
使用CoInitializeEx(NULL,COINIT_MULTITHREADED )
注意事项请查看msdn