多线程 如何让某个线程保证隔一段时间运行
系统采用多线程,其中一个线程想要每隔一秒保存一次数据
当前设定该线程优先级为最高THREAD_PRIORITY_HIGHEST或者THREAD_PRIORITY_TIME_CRITICAL
但采集的数据仍然会有丢失,即隔几分钟就有一秒没有采集
while(1)
{
。。。。。。
end_time
n=end_time-start_time
sleep(1000-n);
start_time
}
这样做了之后稍微好一点,但还是会有丢失。。。还有没有什么好办法?
[解决办法]
SetThreadPriority & CeSetThreadPriority 是不同的, 建議 LZ 用 CeSetThreadPriority(hThread, 0) 即可.
Paul, Chao @ Techware
[解决办法]
楼主可以试试,另开一个线程B,用GetTickCount函数获取起始时间点跟当前时间点,两者相减大于900ms的时候就可以在A线程中进行保存数据的操作了, WinCE线程时间调度大约为100ms,这样子应该不会丢,定时也基本准确吧
[解决办法]
一般线程的优先级尽量不要设置太高,一般normal或者low_normal就可以了
至于数据丢失的问题,
建议是这样(假设是同一个进程)
(若不是同一个进程,建议使用Mutex)
(1)A线程更新数据,如有更新数据,
AthreadProc
{
//===
.....your code out while
//===
while(true)
{
//===
.....your code
//===
section.lock();
setFlag=true;
//(读取数据部分)
section.unlock();
}
}
(2)B线程读取setFlag,
BthreadProc
{
//===
.....your code out while
//===
while(true)
{
//===
.....your code
//===
if(setFlag)
{
section.lock();
setFlag=false;
//(读取数据部分)
section.unlock();
}
}
}
[解决办法]
一定要1秒钟一次保存,不能根据数据实时更新保存吗?
LZ方便说说原因吗?
我说的这个方法就是实时保存,去写数据的时候setFlag=true;
读线程去一直判断setFlag的状态,如果为true就去保存数据,
当然线程之间要有同步...