• 欢迎访问,如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

线程无法运行

C++语言 码拜 3年前 (2017-04-30) 227次浏览
下面一段进程,怎么都不工作,请各位帮看看怎么回事?
这是一段对CY68013的Slave FIFO进行数据采集。

UINT ReadThreadLoop( LPVOID params ) {	//线程处理
	int i;
	bool okin;
        CMySampleDlg *dlg = (CMySampleDlg *) params;
	OVERLAPPED inOvLap;					//是一个包含了用于异步输入输出的信息的结构体
	PUCHAR inData = new UCHAR[512];		//数据缓冲区
	ZeroMemory(inData,1024);			//ZeroMemory用0填充一片内存,第一个参数是起始地址,第二个参数是长度
	inOvLap.hEvent   = CreateEvent(NULL, false, false, "CYUSB_IN"); 
	dlg->InEndpt->TimeOut = 0;

	for (i=0;i<512;i++)		//循环
	{
		LONG inlen=512;
		//异步读数据
		UCHAR  *inContext = dlg->InEndpt->BeginDataXfer(inData,inlen,&inOvLap);
		dlg->InEndpt->WaitForXfer(&inOvLap,200);
		okin = dlg->InEndpt->FinishDataXfer(inData,inlen, &inOvLap,inContext);
		if (okin)						//假如读取成功,则保存数据
		{
			mFile.SeekToEnd();
			mFile.Write(inData,inlen);
		}
	} 
	//结束Start
	ept->Target    = TGT_DEVICE; 
	ept->ReqType   = REQ_VENDOR; 
	ept->Direction = DIR_TO_DEVICE;  
	ept->ReqCode   = 0xAB;				//请求码
	ept->Value     = 0;  
	ept->Index     = 0; 
	PUCHAR buf=new UCHAR[2]; 
	ZeroMemory(buf, 2); 
	LONG buflen =  2; 
	buf[0]=0xAB;
	buf[1]=0x00;						//结束Start
	ept->XferData(buf,buflen);
    CloseHandle(inOvLap.hEvent); 
	delete [] inData;
	dlg->ReadThread = NULL;				//线程结束
    dlg->USBDevice->Close();			//关闭USB设备
	mFile.Flush();						//关闭文件
	mFile.Close();
	return true;
}

有时候会提示“内存不足”
有时候会出现如图的提示:
线程无法运行
这是用另一个软件接收到的传输的数据:
线程无法运行

解决方案

30

单步运行一下到哪里出错的

10

你这段代码错误或不合理的地方有点多啊
这里 :
PUCHAR inData = new UCHAR[512];        //数据缓冲区
ZeroMemory(inData,1024);    //你只申请了512却初始化1k;
这里:
delete [] inData;//这样会产生野指针,应该加上inData = NULL;
这里:
PUCHAR buf=new UCHAR[2];
ZeroMemory(buf, 2);
内存直接没有释放。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明线程无法运行
喜欢 (0)
[1034331897@qq.com]
分享 (0)