长时间运行出现runtime error错误!

cdchengyi 2004-12-21 09:15:05
我新开个线程进行存盘的操作时间长了就会出现runtime error的错误,如果不开这个线程(也就是不进行存盘的操作)就不会出错。请问这是为什么?
我的存盘线程代码如下:
int begin,end;
begin=glPrevDataBufIndex+1;
end=glDataBufIndex+1;
glPrevDataBufIndex=glDataBufIndex;
if(end>begin)
{
glRecordFile->Seek(0L,CFile::end);
glRecordFile->WriteHuge(&(glDataBuf[begin]),(end-begin)*sizeof(WORD));
glRecordIndex+=end-begin;//RECORD_ADD_NUM;//记录索引增加
glRecordFile->Flush();
}
else
{
glRecordFile->Seek(0L,CFile::end);
glRecordFile->WriteHuge(&(glDataBuf[begin]),(glEndDataBufIndex-begin)*sizeof(WORD));
glRecordFile->WriteHuge(&(glDataBuf[0]),end*sizeof(WORD));
glRecordIndex+=glEndDataBufIndex-begin+end+1;
glRecordFile->Flush();
}
return 0;

是用AfxBeginThread(SaveThread,NULL);开始线程的。
...全文
210 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
BigFanOfCpp 2004-12-21
  • 打赏
  • 举报
回复
不要用WriteHuge,因为它在32位平台已经被废除了,行为不可靠!
用标准的Write比较好!
cdchengyi 2004-12-21
  • 打赏
  • 举报
回复
还是不行阿,我是没14ms开始一次这个存盘的线程,就是不行。
我试着改为30ms一次就可以了。但是30ms就达不到要求了。
这是为什么阿?
老夏Max 2004-12-21
  • 打赏
  • 举报
回复
多做一些异常处理就可以了!
msm 2004-12-21
  • 打赏
  • 举报
回复
关注!
MZP 2004-12-21
  • 打赏
  • 举报
回复
InitializeCriticalSection (&glWatch.csMyCriticalSection)应放到主线程中调用。

EnterCriticalSection (&glWatch.csMyCriticalSection);
{
int begin,end;
begin=glPrevDataBufIndex+1;
end=glDataBufIndex+1;
glPrevDataBufIndex=glDataBufIndex;
if(end>begin)
{
glRecordFile->Seek(0L,CFile::end);
glRecordFile->WriteHuge(&(glDataBuf[begin]),(end-begin)*sizeof(WORD));
glRecordIndex+=end-begin;//RECORD_ADD_NUM;//记录索引增加
glRecordFile->Flush();
}
else
{
glRecordFile->Seek(0L,CFile::end);
glRecordFile->WriteHuge(&(glDataBuf[begin]),(glEndDataBufIndex-begin)*sizeof(WORD));
glRecordFile->WriteHuge(&(glDataBuf[0]),end*sizeof(WORD));
glRecordIndex+=glEndDataBufIndex-begin+end+1;//RECORD_ADD_NUM;//记录索引增加
glRecordFile->Flush();
}
}
LeaveCriticalSection (&glWatch.csMyCriticalSection);
return 0;
IloveAzhu 2004-12-21
  • 打赏
  • 举报
回复
我还是怀疑你的Section适用又问题(return 0后再Leave??是不是有问题??),用CCriticalSection吧,比较好控制。
上班时间,来不及细想,见谅!
cdchengyi 2004-12-21
  • 打赏
  • 举报
回复
没人回答阿,各位大侠帮忙看看,谢谢
cdchengyi 2004-12-21
  • 打赏
  • 举报
回复
我加了同步控制的
如下InitializeCriticalSection (&glWatch.csMyCriticalSection);
EnterCriticalSection (&glWatch.csMyCriticalSection);
{
int begin,end;
begin=glPrevDataBufIndex+1;
end=glDataBufIndex+1;
glPrevDataBufIndex=glDataBufIndex;
if(end>begin)
{
glRecordFile->Seek(0L,CFile::end);
glRecordFile->WriteHuge(&(glDataBuf[begin]),(end-begin)*sizeof(WORD));
glRecordIndex+=end-begin;//RECORD_ADD_NUM;//记录索引增加
glRecordFile->Flush();
}
else
{
glRecordFile->Seek(0L,CFile::end);
glRecordFile->WriteHuge(&(glDataBuf[begin]),(glEndDataBufIndex-begin)*sizeof(WORD));
glRecordFile->WriteHuge(&(glDataBuf[0]),end*sizeof(WORD));
glRecordIndex+=glEndDataBufIndex-begin+end+1;//RECORD_ADD_NUM;//记录索引增加
glRecordFile->Flush();
}
return 0;
}
LeaveCriticalSection (&glWatch.csMyCriticalSection);
IloveAzhu 2004-12-21
  • 打赏
  • 举报
回复
你需要进行同步控制。
建立临界区,如果是多线程写文件就会出错的。
可以适用CCriticalSection等控制一下。
cdchengyi 2004-12-21
  • 打赏
  • 举报
回复
急用,在线等阿

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧