请教:多线程问题,SetWaitableTimer
时间:2011-11-29
来源:互联网
想进行数据采集,然后定时进行处理,因为数据采集的原因,必须进行定时处理,现在是在一个线程中进行数据接收并写入数据库,打算再开一个线程(下面的线程)进行定时处理。现在有一个问题,就是在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);
}
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);
}
作者: liubj07 发布时间: 2011-11-29
运行的时候出现0xC0000005: Access violation reading location 0xfeeeff4a.
内存访问错误
你的两个线程要想同步,有很多种方法
关键看你的应用比较适合哪一种
WaitForSingleObject可以实现你的功能
不过单进程中线程同步的话,用临界区吧,简单点
感觉你要实现的功能简单,但是用到的技术却很深,适合吗?
内存访问错误
你的两个线程要想同步,有很多种方法
关键看你的应用比较适合哪一种
WaitForSingleObject可以实现你的功能
不过单进程中线程同步的话,用临界区吧,简单点
感觉你要实现的功能简单,但是用到的技术却很深,适合吗?
作者: sky101010ws 发布时间: 2011-12-01
对mfc也不是很熟悉,现在要在原来的代码中添加处理过程。想问下,临界区是在线程中任何地方添加都可以吗?还是必须在线程while循环的起始和结尾处添加~谢啦
引用 1 楼 sky101010ws 的回复:
运行的时候出现0xC0000005: Access violation reading location 0xfeeeff4a.
内存访问错误
你的两个线程要想同步,有很多种方法
关键看你的应用比较适合哪一种
WaitForSingleObject可以实现你的功能
不过单进程中线程同步的话,用临界区吧,简单点
感觉你要实现的功能简单,但是用到的技术却很深,适合吗?
运行的时候出现0xC0000005: Access violation reading location 0xfeeeff4a.
内存访问错误
你的两个线程要想同步,有很多种方法
关键看你的应用比较适合哪一种
WaitForSingleObject可以实现你的功能
不过单进程中线程同步的话,用临界区吧,简单点
感觉你要实现的功能简单,但是用到的技术却很深,适合吗?
作者: liubj07 发布时间: 2011-12-01
定时处理和数据接收同在一个线程上不行吗?
为何要单独开启一个定时处理的线程?
为何要单独开启一个定时处理的线程?
作者: yuucyf 发布时间: 2011-12-01
引用 2 楼 liubj07 的回复:
对mfc也不是很熟悉,现在要在原来的代码中添加处理过程。想问下,临界区是在线程中任何地方添加都可以吗?还是必须在线程while循环的起始和结尾处添加~谢啦
引用 1 楼 sky101010ws 的回复:
运行的时候出现0xC0000005: Access violation reading location 0xfeeeff4a.
内存访问错误
你的两个线程要想同步,有很多种方法
……
对mfc也不是很熟悉,现在要在原来的代码中添加处理过程。想问下,临界区是在线程中任何地方添加都可以吗?还是必须在线程while循环的起始和结尾处添加~谢啦
引用 1 楼 sky101010ws 的回复:
运行的时候出现0xC0000005: Access violation reading location 0xfeeeff4a.
内存访问错误
你的两个线程要想同步,有很多种方法
……
临界区是来保护你需要的资源,防止多个线程同时访问的地方添加
作者: oyljerry 发布时间: 2011-12-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28