oracle8i/9i +VC6.0+odbc 多线程
程序运行一段时间后,就会弹出该Assert失败的问题,请问高手如何解决?
在线等!
程序运行一段时间后,就会弹出该Assert失败的问题,请问高手如何解决?
在线等!
解决方案 »
- MFC 如何控制输入焦点出现和消失
- 使用WinINet下载网页,如何处理服务端返回内容为gzip或deflate编码的情况?
- 我用CInternetSession写的下载控件,在同一网段的局域网内运行正常,可在公网上就不行了?
- ********如何在WIN32工程用引用CString类?********
- 在VC6.0中开发的软件怎么打包
- 关于全局变量的问题
- 哪位大侠知道vc下的ActiveSkin咋用,请指点一二!先谢了。
- 哪位朋友帮我拷几个文件好吗?
- 【求助】在VC中使用boost库中的环形队列的问题
- 有关函数指针的问题。
- 怎样将一个CFormView创建到CDialog中去?
- CTreeCtrl控件的使用问题。
{
ASSERT_VALID(this);
ASSERT(m_hdbc != SQL_NULL_HDBC); if (!m_bTransactions)
return FALSE; // Only 1 level of transactions supported
#ifdef _DEBUG
ASSERT(!m_bTransactionPending);//这里
#endif RETCODE nRetCode;
AFX_SQL_SYNC(::SQLSetConnectOption(m_hdbc, SQL_AUTOCOMMIT,
SQL_AUTOCOMMIT_OFF));
DEBUG_ONLY(m_bTransactionPending = TRUE); return Check(nRetCode);
}
//上面是MFC中的源代码。可见在你的程序中m_bTransactionPending此时的值为TRUE。这是不正确的!!而对其赋值的只有这个函数中的:
DEBUG_ONLY(m_bTransactionPending = TRUE);
可见可能是处理同步的原因导致的!
F:\VCÔ´Âë²Î¿¼\MFC\Include\AFXDB.H(283): BOOL m_bTransactionPending;
F:\VCÔ´Âë²Î¿¼\MFC\SRC\DBCORE.CPP(208): DEBUG_ONLY(m_bTransactionPending = FALSE);
F:\VCÔ´Âë²Î¿¼\MFC\SRC\DBCORE.CPP(490): ASSERT(!m_bTransactionPending);
F:\VCÔ´Âë²Î¿¼\MFC\SRC\DBCORE.CPP(496): DEBUG_ONLY(m_bTransactionPending = TRUE);
F:\VCÔ´Âë²Î¿¼\MFC\SRC\DBCORE.CPP(511): ASSERT(m_bTransactionPending);
F:\VCÔ´Âë²Î¿¼\MFC\SRC\DBCORE.CPP(522): DEBUG_ONLY(m_bTransactionPending = FALSE);
F:\VCÔ´Âë²Î¿¼\MFC\SRC\DBCORE.CPP(537): ASSERT(m_bTransactionPending);
F:\VCÔ´Âë²Î¿¼\MFC\SRC\DBCORE.CPP(548): DEBUG_ONLY(m_bTransactionPending = FALSE);
F:\VCÔ´Âë²Î¿¼\MFC\SRC\DBCORE.CPP(926): dc << "\nm_bTransactionPending = " << m_bTransactionPending;
9 occurrence(s) have been found.
先顶一次
F:\VC源码\MFC\Include\AFXDB.H(283): BOOL m_bTransactionPending;
F:\VC源码\MFC\SRC\DBCORE.CPP(208): DEBUG_ONLY(m_bTransactionPending = FALSE);
F:\VC源码\MFC\SRC\DBCORE.CPP(490): ASSERT(!m_bTransactionPending);
F:\VC源码\MFC\SRC\DBCORE.CPP(496): DEBUG_ONLY(m_bTransactionPending = TRUE);
F:\VC源码\MFC\SRC\DBCORE.CPP(511): ASSERT(m_bTransactionPending);
F:\VC源码\MFC\SRC\DBCORE.CPP(522): DEBUG_ONLY(m_bTransactionPending = FALSE);
F:\VC源码\MFC\SRC\DBCORE.CPP(537): ASSERT(m_bTransactionPending);
F:\VC源码\MFC\SRC\DBCORE.CPP(548): DEBUG_ONLY(m_bTransactionPending = FALSE);
F:\VC源码\MFC\SRC\DBCORE.CPP(926): dc << "\nm_bTransactionPending = " << m_bTransactionPending;
9 occurrence(s) have been found.
为 m_bTransactionPending 置 FALSE 的位置位于 BeginTrans,因此最根本的办法只有使用线程同步