64,282
社区成员
发帖
与我相关
我的任务
分享
UINT ReadThreadLoop( LPVOID params ) { //线程处理
bool okin; //bool表示布尔型数据
CSJCJVCDlg *dlg = (CSJCJVCDlg *) params;
OVERLAPPED inOvLap; //OVERLAPPED:你需要操作系统传递一批数据,于是填了一个overlapped的订单,订单上写着从哪里(数据的偏移位置)开始传输,
//于是你去干别的事去了。系统完成传输就打个电话(激活hEvent)叫你验收,你看到overlapped订单上系统写着的传输的数据数量验收接收的数据。
//另一种解释:OVERLAPPED I/O是WIN32的一项技术, 你可以要求操作系统为你传送数据,并且在传送完毕时通知你。
//这项技术使你的程序在I/O进行过程中仍然能够继续处理事务。事实上,操作系统内部正是以线程来I/O完成OVERLAPPED I/O。你可以获得线程的所有利益,而不需付出什么痛苦的代价。也就是说,OVERLAPPED主要是设置异步I/O操作,异步I/O操作是指应用程序可以在后台读或者写数据,而在前台做其他事情。
PUCHAR inData = new UCHAR[512]; //建立一个字符数据缓冲区,大小为512个字节。PUCHAR: 指向一个Windows字符的指针;UCHAR:无符号Windows字符
ZeroMemory(inData,512); //ZeroMemory用0填充一片内存,第一个参数是起始地址,第二个参数是长度
inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN");
dlg->InEndpt->TimeOut = 0;//运行到这里出现错误 //TimeOut表示传输等待时间
for (;dlg->ReadThreadLooping ;) //循环
{
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 []buf;
buf = NULL;
delete [] inData;
inData = NULL;
dlg->ReadThread = NULL; //线程结束
dlg->USBDevice->Close(); //关闭USB设备
mFile.Flush(); //关闭文件
mFile.Close();
return true;
}
dlg->InEndpt->TimeOut = 0; //运行到这里出现错误
if (pThread->m_pfnThreadProc != NULL)
{
nResult = (*pThread->m_pfnThreadProc)(pThread->m_pThreadParams);
ASSERT_VALID(pThread);
}
C
CyUSBEndPoint *InEndpt; //这个是InEndpt的定义
UINT ReadThreadLoop( LPVOID params ) { //线程处理
bool okin;
CSJCJVCDlg *dlg = (CSJCJVCDlg *) params;
OVERLAPPED inOvLap;
PUCHAR inData = new UCHAR[512];
ZeroMemory(inData,512); //ZeroMemory用0填充一片内存,第一个参数是起始地址,第二个参数是长度
inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN");
dlg->InEndpt->TimeOut = 0; //运行到这里出现错误 这里是第一次使用InEndpt
我的InEndpt这个指针的定义是[code=c]CCyUSBEndPoint *InEndpt;
InEndpt = new CCyUSBEndPoint;
CCyUSBEndPoint *InEndpt;
InEndpt = new CCyUSBEndPoint;
C
CyUSBEndPoint *InEndpt; //这个是InEndpt的定义
UINT ReadThreadLoop( LPVOID params ) { //线程处理
bool okin;
CSJCJVCDlg *dlg = (CSJCJVCDlg *) params;
OVERLAPPED inOvLap;
PUCHAR inData = new UCHAR[512];
ZeroMemory(inData,512); //ZeroMemory用0填充一片内存,第一个参数是起始地址,第二个参数是长度
inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN");
dlg->InEndpt->TimeOut = 0; //运行到这里出现错误 这里是第一次使用InEndpt
我的InEndpt这个指针的定义是[code=c]CCyUSBEndPoint *InEndpt;
按照您说的,是这样添加吗InEndpt = new CCyUSBEndPoint;
这样显示是错误的,还是我没有理解您的意思呢[/quote]C
CyUSBEndPoint *InEndpt; //这个是InEndpt的定义
UINT ReadThreadLoop( LPVOID params ) { //线程处理
bool okin;
CSJCJVCDlg *dlg = (CSJCJVCDlg *) params;
OVERLAPPED inOvLap;
PUCHAR inData = new UCHAR[512];
ZeroMemory(inData,512); //ZeroMemory用0填充一片内存,第一个参数是起始地址,第二个参数是长度
inOvLap.hEvent = CreateEvent(NULL, false, false, "CYUSB_IN");
dlg->InEndpt->TimeOut = 0; //运行到这里出现错误 这里是第一次使用InEndpt
我的InEndpt这个指针的定义是[code=c]CCyUSBEndPoint *InEndpt;
按照您说的,是这样添加吗InEndpt = new CCyUSBEndPoint;
这样显示是错误的,还是我没有理解您的意思呢