NT系统下ADO操作Access数据库出现的怪现象?
用ADO操作数据库,放在动态链接库中的线程里执行:
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
return -1;
InitHisData(pColPara);//数据库操作函数,在DLL中
}
//起线程
void InitHisData(void* addr)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
AfxBeginThread((AFX_THREADPROC)HisDataSave,(IOSOCKET *)addr,THREAD_PRIORITY_NORMAL);
}
//线程函数
UINT HisDataSave(LPVOID pParam)
{
SYSTEMTIME tm;
GetLocalTime(&tm);
static WORD lastHour=tm.wHour;
ConnectData();
for ( ; ; )
{
if (bStopFlag)
{
DataDisconnect();
return 0;
}
GetLocalTime(&tm);
if(lastHour!=tm.wHour)
{
SaveHisData();//SaveHisData包含打开表、插入记录、关闭表的操作
lastHour=tm.wHour;
}
Sleep(1000);
}
}
现象:我在SaveHisData函数中添加记录时使用了m_pRecordSet->Filter属性,结果程序一运行起来,NT系统右下角的系统时钟无法修改(在系统日期/时间面板修改时钟后,点击确定或应用,日期/时钟面板没响应,鼠标移到此面板上变成沙漏形),数据库程序工作仍然正常,系统内存、CPU占用率都正常。
如果我不使用m_pRecordSet->Filter属性,则没有此现象,另外,我测试如果不使用for循环,只让数据存储一次(仍然使用Filter属性),同样正常。
此外,在Win2000系统中上述代码工作完全正常(使用Filter属性,且用For循环)
各位大侠,指点指点,不胜感激。