请教:多线程问题,SetWaitableTimer
想进行数据采集,然后定时进行处理,因为数据采集的原因,必须进行定时处理,现在是在一个线程中进行数据接收并写入数据库,打算再开一个线程(下面的线程)进行定时处理。现在有一个问题,就是在TimerAPCRoutine函数进行的过程中,对数据库的操作是有问题的,猜想可能是此时在数据采集的线程中也有对数据库的操作所以冲突,请教下怎么使这两个线程同步,避免这种冲突。不会是仅仅加入waitsingleobject吧?运行的时候出现0xC0000005: Access violation reading location 0xfeeeff4a.此时 HRESULT _hr = raw_Open(Source, ActiveConnection, CursorType, LockType, Options);返回的是一个很大的负数(此时的数据库操作语句没有错误,是运行几分钟后才出现的错误)。谢谢~
DWORD MyDlg::TimerThreadFunc(LPVOID lpParam)
{
HANDLE hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
LARGE_INTEGER liDueTime;
liDueTime.QuadPart=-300000000;
//Sleep(3000);
SetWaitableTimer(hTimer, &liDueTime, 10000, TimerAPCRoutine, pDlg, FALSE)
while(1)
{
SleepEx(INFINITE, TRUE);
}
CloseHandle(hTimer);
}
[解决办法]
运行的时候出现0xC0000005: Access violation reading location 0xfeeeff4a.
内存访问错误
你的两个线程要想同步,有很多种方法
关键看你的应用比较适合哪一种
WaitForSingleObject可以实现你的功能
不过单进程中线程同步的话,用临界区吧,简单点
感觉你要实现的功能简单,但是用到的技术却很深,适合吗?
[解决办法]