UINT CDemoCANDlg::ReceiveThread(LPVOID v)
{
CDemoCANDlg *dlg=(CDemoCANDlg*) AfxGetApp()->GetMainWnd();
int k=0;
while(1)
{
int NumValue;
int i;
VCI_CAN_OBJ pCanObj[200];
CString strbuf[200],str1;
CString ID;//存盤ID號
CString DATA[8];
CString Index[8];
Index[0] = "你: ";
Index[1] = "我: ";
Index[2] = "他: ";
Index[3] = "解決: ";
Index[4] = "解決: ";
Index[5] = "dw ";
Index[6] = " w w";
Index[7] = "ww ";
int num=0;
CSize size;
unsigned int JustnowItem;
BYTE ReceivedID[4];
size.cx=0;
size.cy=50;
CString str;
int Len=0;
for(int kCanIndex=0;kCanIndex<2;kCanIndex++)
{
//呼叫動態鏈接看接收函式
NumValue=https://bbs.csdn.net/topics/VCI_Receive(dlg->m_DevType,dlg->m_DevIndex,kCanIndex,pCanObj);
//接收資訊串列顯示
k++;
CString strTime;
SYSTEMTIME systime;
GetLocalTime(&systime);
strTime.Format("%02d:%02d:%02d:%03d", systime.wHour,systime.wMinute,systime.wSecond,systime.wMilliseconds);
for(num=0;num<NumValue;num++)
{
if(nextrow==59999)
{
dlg->m_list.DeleteAllItems();
nextrow=0;
}
dlg->m_list.ItemColorFlag[nextrow]=0;
str.Format("%d",nextrow); //第str行資料
JustnowItem=dlg->m_list.InsertItem(nextrow,str);
nextrow++;
dlg->m_list.SetItemText(JustnowItem,1,strTime); //strTime系統時間
str.Format("%d",kCanIndex);
dlg->m_list.SetItemText(JustnowItem,2,str);
dlg->m_list.SetItemText(JustnowItem,3,"Receive");
str="";
if((pCanObj[num].RemoteFlag)==1)
{
dlg->m_list.SetItemText(JustnowItem,5,"Remote");
}
else
{
dlg->m_list.SetItemText(JustnowItem,5,"Data");
}
if((pCanObj[num].ExternFlag)==1)
{
for(i=0;i<4;i++)
ReceivedID[i]=pCanObj[num].ID[i];
if(dlg->m_radioIDFormat)//from sja1000 format to direct id
{
ReceivedID[3]=(ReceivedID[2]<<5)|(ReceivedID[3]>>3);
ReceivedID[2]=(ReceivedID[1]<<5)|(ReceivedID[2]>>3);
ReceivedID[1]=(ReceivedID[0]<<5)|(ReceivedID[1]>>3);
ReceivedID[0]=ReceivedID[0]>>3;
}
for(i=0;i<4;i++)
{
str1.Format("%02X",ReceivedID[i]);
str+=str1;
ID = str;
}
dlg->m_list.SetItemText(JustnowItem,4,str); //ID資訊
dlg->m_list.SetItemText(JustnowItem,6,"Extended"); //
}
else //標準幀
{
for(i=0;i<2;i++)
ReceivedID[i]=pCanObj[num].ID[i];
if(dlg->m_radioIDFormat)//將CAN2.0B格式進行轉換到直接ID值
{
ReceivedID[1]=(ReceivedID[1]>>5)|(ReceivedID[0]<<3);
ReceivedID[0]=ReceivedID[0]>>5;
}
for(i=0;i<2;i++)
{
str1.Format("%02X",ReceivedID[i]);
str+=str1;//保存最終ID號
ID = str;
}
dlg->m_list.SetItemText(JustnowItem,4,str); //ID資訊
dlg->m_list.SetItemText(JustnowItem,6,"Standard"); //
}
str.Format("%d",pCanObj[num].DataLen); //長度資訊 8位元組
dlg->m_list.SetItemText(JustnowItem,7,str);
str="";
if (ID != "0409")
{
for (i = 0; i<(pCanObj[num].DataLen); i++) //資料資訊
{
str1.Format("%02X ", pCanObj[num].Data[i]);
DATA[i] = str1;
str += str1; //str最終的8位元組資料 str "0E 07 99 95 00 11 0D 00 "
}
}
else
{
Index[0] += DATA[0];
Index[1] += DATA[1];
Index[2] += DATA[2];
Index[3] += DATA[3];
Index[4] += DATA[4];
Index[5] += DATA[5];
Index[6] += DATA[6];
Index[7] += DATA[7];
//呼叫 下面的代碼會產生中斷
dlg->range.put_Item(COleVariant((long)1), COleVariant((long)1), COleVariant(Index[0]));
dlg->range.put_Item(COleVariant((long)1), COleVariant((long)2), COleVariant(Index[1]));
dlg->range.put_Item(COleVariant((long)1), COleVariant((long)3), COleVariant(Index[2]));
dlg->range.put_Item(COleVariant((long)1), COleVariant((long)4), COleVariant(Index[3]));
dlg->range.put_Item(COleVariant((long)1), COleVariant((long)5), COleVariant(Index[4]));
dlg->range.put_Item(COleVariant((long)1), COleVariant((long)6), COleVariant(Index[5]));
dlg->range.put_Item(COleVariant((long)1), COleVariant((long)7), COleVariant(Index[6]));
dlg->range.put_Item(COleVariant((long)1), COleVariant((long)8), COleVariant(Index[7]));
}
dlg->m_list.SetItemText(JustnowItem,8,str);
dlg->m_list.Scroll(size);
//接收資訊串列顯示完畢
}
}
Sleep(10);
if(StopFlag==1)
return 0;
}
return 1;
}
uj5u.com熱心網友回復:
執行緒中沒有初始化COM推薦執行緒中發送訊息到主行程中,主行程進行讀寫操作,
uj5u.com熱心網友回復:
一般看代碼感覺沒什么問題。你看外部是否有同時操作EXCEL物件。
畢竟一個文本,不能同時寫。
有幫助記得給分。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/85574.html
標籤:進程/線程/DLL
上一篇:滑鼠的移動速度檢測
下一篇:QListWidget中滑鼠劃過item時沒有收到 itemEntered(QListWidgetItem*) 信號, 已經設定mouseTracking;
