应用程序正常初始化(0x0000142)失败,跪下了!

此帐号已弃用12 2010-05-18 04:36:14
下面这个线程引起这个错误,求教高手救命啊,运行一段时间就弹这个错,不运行这个线程就没有问题。

UINT __stdcall SaveJPGThread( void *dummy )
{
CGQ_TESTDlg* pDlg = (CGQ_TESTDlg*)dummy;
int QueueSize = 0;
int ContinueFailed = 0;
char VedioPath[_MAX_PATH];
strcpy(VedioPath,pDlg->m_VedioSavePath.GetBuffer(0));
pDlg->m_VedioSavePath.ReleaseBuffer();
while(!pDlg->m_bQuitThread)
{
EnterCriticalSection( &pDlg->m_JPG_DATA_cs );
QueueSize = pDlg->m_JPGQueue.size();
if(QueueSize > 0)
{
JPG_DATA JPGImg = (JPG_DATA)pDlg->m_JPGQueue.front();
pDlg->m_JPGQueue.pop();
LeaveCriticalSection( &pDlg->m_JPG_DATA_cs );

if(ContinueFailed > 5)
{
theApp.m_Log.Add("写文件连续错误5次!退出程序");
SetEvent( pDlg->m_SaveJPGThreadEvent );
pDlg->m_bSaveVedio = FALSE;
exit(0);
return 0;
}
if(pDlg->SaveJPGImg(JPGImg,VedioPath))
{
ContinueFailed = 0;
}
else
{
theApp.m_Log.Add("存储视频文件错误!");
ContinueFailed++;
}

EnterCriticalSection( &pDlg->m_JPG_DATA_cs );
pDlg->m_JPGBufList[JPGImg.BufNo].bUsed = FALSE;
LeaveCriticalSection( &pDlg->m_JPG_DATA_cs );
}
else
{
LeaveCriticalSection( &pDlg->m_JPG_DATA_cs );
}
if(0 == QueueSize)
{
Sleep(10);
}
}
SetEvent( pDlg->m_SaveJPGThreadEvent );
return 1;
}


BOOL CGQ_TESTDlg::SaveJPGImg(JPG_DATA& pImg,char* pVedioPath)
{
static char fname[_MAX_PATH];
static char strFilePath[_MAX_PATH];
static char strTimeDay[20];
static char strTimeHour[20];
static char strTimeMin[20];
static char strIP[20];

DEVICE_TIME& systime = pImg.ImgInfo.systemtime;

sprintf(strTimeDay,"%04d-%02d-%02d",systime.tm_year,
systime.tm_mon,systime.tm_mday);
sprintf(strTimeHour,"\\%02d",systime.tm_hour );
sprintf(strTimeMin,"\\%02d",systime.tm_min );
sprintf(strIP,"\\%s",pImg.ImgInfo.IP );

strcpy(strFilePath,pVedioPath);

strcat(strFilePath,strTimeDay);
if(!PathFileExists(strFilePath))
{
if(!CreateDirectory(strFilePath,NULL))
{
return FALSE;
}
}
//小时文件夹
strcat(strFilePath,strTimeHour);
if(!PathFileExists(strFilePath))
{
if(!CreateDirectory(strFilePath,NULL))
{
return FALSE;
}
}
//分钟文件夹
strcat(strFilePath,strTimeMin);
if(!PathFileExists(strFilePath))
{
if(!CreateDirectory(strFilePath,NULL))
{
return FALSE;
}
}
//IP文件夹
strcat(strFilePath,strIP);
if(!PathFileExists(strFilePath))
{
if(!CreateDirectory(strFilePath,NULL))
{
return FALSE;
}
}

sprintf(fname,"%s\\%02d-%03d.jpg",
strFilePath,systime.tm_sec,systime.tm_millisecond);

FILE *pFile = fopen(fname,"wb");
if(pFile != NULL)
{
int size = fwrite(pImg.ImgInfo.pImageData,
1,pImg.ImgInfo.Imagelen,pFile);
fclose(pFile);
if(size == pImg.ImgInfo.Imagelen)
{
return TRUE;
}
}
return FALSE;
}
...全文
1589 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinjay 2010-05-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xianglitian 的回复:]
CGQ_TESTDlg* pDlg = (CGQ_TESTDlg*)dummy;
===========
MFC的界面类不是线程安全的
你最好不要这么调用
可以传窗口句柄进来
然后通过消息与界面通信
[/Quote]
可以试试,传窗口句柄比你传控件指针安全些...或许把这么大的工作量让多个线程去处理比较合适。你这样,一旦这个线程挂了,那就完蛋了,如果有几个线程一起处理,这样相对稳定一些,一旦一个挂掉了,其他的线程还能正常处理,所以你只要管理好线程,就可以了。
oyljerry 2010-05-18
  • 打赏
  • 举报
回复
先增加调试输出等来定位出问题的代码语句吧..
也可以根据dump等结合pDB来分析
shen_wei 2010-05-18
  • 打赏
  • 举报
回复
长长的代码,看着真累啊。

具体的错误也没有提出是什么。。。。。
  • 打赏
  • 举报
回复
不好意思,太急了,代码有点长,总体的过程这个线程就是不停的向磁盘写文件,一天要生存两百多万个文件,XP系统,运行几个小时就弹出这个错误。
向立天 2010-05-18
  • 打赏
  • 举报
回复
CGQ_TESTDlg* pDlg = (CGQ_TESTDlg*)dummy;
===========
MFC的界面类不是线程安全的
你最好不要这么调用
可以传窗口句柄进来
然后通过消息与界面通信
soswaidao 2010-05-18
  • 打赏
  • 举报
回复
楼主把代码精简一下好吗
快乐鹦鹉 2010-05-18
  • 打赏
  • 举报
回复
长长的代码,看着真累啊。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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