下面是代码:
closeFramegrabber 这个算子报错:堆已经损坏
UINT CCheckcodeDlg::ContinueGrabThread(LPVOID p)
{
CCheckcodeDlg *pThis = (CCheckcodeDlg*)p;
HTuple hv_Information, hv_name;
CString str;
pThis->GetDlgItem(IDC_GET_OBJ_COMBO)->GetWindowTextW(str);
hv_name = (LPSTR)str.GetBuffer();
OpenFramegrabber("DirectShow", 1, 1, 0, 0, 0, 0, "default", 8, "rgb", -1, "false",
"default", hv_name, 0, -1, &pThis->hv_AcqHandle);
//采图
pThis->GetDlgItem(IDC_OPEN_DOWN_CAMERA_BUTTON)->EnableWindow(false);
pThis->GetDlgItem(IDC_CLOSE_DOWN_CAMERA_BUTTON)->EnableWindow(true);
GrabImage(&pThis->ho_Image, pThis->hv_AcqHandle);
//显示
GetImageSize(pThis->ho_Image, &pThis->hW, &pThis->hH); //获取图片大小
SetPart(pThis->hWndID, 0, 0, pThis->hH, pThis->hW); //设置显示的范围
GrabImageStart(pThis->hv_AcqHandle, -1);
while (WaitForSingleObject(exitGrabThread.m_hObject, 2) != WAIT_OBJECT_0) // 没有信号执行采图循环
{
GrabImage(&pThis->ho_Image, pThis->hv_AcqHandle);
DispObj(pThis->ho_Image, pThis->hWndID);
}
CloseFramegrabber(pThis->hv_AcqHandle);
return 0;
}
while的退出条件是 exitGrabThread.SetEvent();