首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

Timage控件的有关问题吗

2012-03-08 
Timage控件的问题吗?int__stdcall demo_HD_RECV_CALLBACK(LPARAM lParam, int count){try{char szt[_MAX_P

Timage控件的问题吗?
int __stdcall demo_HD_RECV_CALLBACK(LPARAM lParam, int count)
{
  try
  {
char szt[_MAX_PATH] = "";

HD_INFO Info;
HD_RESULT_1 Result;
if (HD_GetHeadInfo(&Info)==0 )
{
if (Info.cbResult)
{
//HD_RESULT_1是处理车头和车尾的情况的结果
try
{
if (HD_GetHeadData(HD_DATA_TYPE_RESULT_1, (LPBYTE)&Result, sizeof(Result)) > 0)
{

Stringsz = Trim(Result.szLicense);
if(sz=="无牌/拒识")sz="";
if(Info.nChannel==MainFrm->Lane1ID)
MainFrm->Plate1Edt->Text=sz;// Result.szLicense;
else
MainFrm->Plate2Edt->Text=sz;// Result.szLicense;

}
}
catch(...)
{
//ShowMessage("1");
  }
}


if (Info.cbImageFile > 0)//缓冲区
{


}
else if (Info.cbImageFile == -1)//文件名
{
int ii=0;

try
{
if (HD_GetHeadData(HD_DATA_TYPE_IMAGE, (LPBYTE)szt, _MAX_PATH) > 0)
{
if (FileExists(szt))
{
Sleep(30);
if(Info.nChannel==MainFrm->Lane1ID)
{
MainFrm->Pic12Str=String(szt);
MainFrm->Image12->Picture->LoadFromFile(szt);




}
else
{
MainFrm->Pic22Str=String(szt);
MainFrm->Image22->Picture->LoadFromFile(szt);


}

}
}
}
catch(...)
{
//ShowMessage("2");
}


}

if (Info.cbBackFile > 0)//缓冲区
{

}
else if (Info.cbBackFile == -1)//文件名
{
try
{
if (HD_GetHeadData(HD_DATA_TYPE_BACK_PICTURE, (LPBYTE)szt, _MAX_PATH) > 0)
{


if (FileExists(szt))
{
Sleep(20);
if(Info.nChannel==MainFrm->Lane1ID)
{
MainFrm->Image11->Picture->LoadFromFile(szt);
MainFrm->Pic11Str=String(szt);
}
else
{
MainFrm->Image21->Picture->LoadFromFile(szt);
MainFrm->Pic21Str=String(szt);

}
}
}

}
catch(...)
{
//ShowMessage("3");
}
}
if (Info.cbBinFile > 0)//缓冲区
{

}
else if (Info.cbBinFile == -1)//文件名
{

if (HD_GetHeadData(HD_DATA_TYPE_BIN, (LPBYTE)szt, _MAX_PATH) > 0)
{
if (FileExists(szt))
{


}

}
}

if (Info.cbFrontFile > 0)//缓冲区
{

}
else if (Info.cbFrontFile == -1)//文件名
{
try
{
if (HD_GetHeadData(HD_DATA_TYPE_FRONT_PICTURE, (LPBYTE)szt, _MAX_PATH) > 0)
{

if (FileExists(szt))
{
//Sleep(20);
if(Info.nChannel==MainFrm->Lane1ID)
{
//MainFrm->Image11->Picture->LoadFromFile(szt);
//MainFrm->Pic11Str=String(szt);

}
else
{
// MainFrm->Image21->Picture->LoadFromFile(szt);
// MainFrm->Pic21Str=String(szt);

}

}
}

}
catch(...)
{
//ShowMessage("4");
}
}

}

  }
  catch(...)
  {
//ShowMessage("5");
  }
return 0;
}
这个函数是一直被循环调用的,
如果里面加sleep(20);
程序一天不会弹出一个错误,时间长了也会粗错
如果延时小于10毫秒,就会经常弹出错误了,错误提示如下:
Access violation at address 005A08e6 in module'bjhighspeedsys.exe'.Write of address 04d23c82
,不知道是什么原因啊???
MainFrm->Image11->Picture->LoadFromFile(szt);


难道不能连续执行这句吗?
间隔多长时间才行啊?

[解决办法]
先清空了再 Load试试
[解决办法]
这个问题前段好像有人提过,在BCB中这种问题经常发生,可能的原因是你的由于系统其它进程占有CPU时间过长(或读写硬盘时间过长),导致LoadFromFile时间过长,上一个没完成,下一个又执行而出现异常
目前能想到的解决方案就是加Sleep(),我在我的工控程序中经常加Sleep,加入的时间由经验来定(多测试)
另外可行的解决方案
1.减少系统中的应用
2.提高硬件配制
3.升级BCB(BCB5的出错概率要比6大,BCB6的话打update4,或升成更高的版本)
[解决办法]
首先图片不宜过大
然后先清空一下MainFrm->Image11->Picture =NULL ;
适当的Sleep()
[解决办法]
学习!
[解决办法]
你是不是在线程中调用该函数呀?

我觉得有可能是 TImage 的内存管理问题引起的

我认为最简单的办法就是每次 new/delete 一个 TImage 对象
[解决办法]
清空一下再Load试试

热点排行