一支给多个COM口发送数据的模拟程序!!! 大家好,最近要做一个VC++的模拟程序。要求可以“同时”给多个COM口发送数据。由于我对VC++中的线程还不是很熟悉。所以请问那位高手可以指点提示一下。能给些启发性的例子更好。 小女子先谢谢大家了,第一次提问。还请大家支持一下!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www.vckbase.com/ 很多串口编程得例子,改一下就可以了 afxBeginthread(threadproc ,hwnd,priority)这里是线程的启动代码,参数是我编的,你可以看看,第一个参数,是你的线程名称,第二个是一个句柄,可以申请安全句柄,第三个是线程的优先级建议你使用pcomm,网上可以下到,很好,也简单,从pcomm入手,线程学会建立,就是上面的那一句代码就够了,很快就会掌握,不过可能会有很多实际的经验性问题,我做了两年串口,还是做的不怎么好 DISCIP_1(宝贝)您好,刚才给你写了很多的话语,没有料到不能发送,请问你的msn是多少?可否指点一下!! 申请线程的例子:HWND hWnd1=GetSafeHwnd();AfxBeginThread(ThreadProcA,hWnd1,THREAD_PRIORITY_NORMAL);线程本身例子:UINT ThreadProcA(LPVOID param){ char *ptrBufInF; char cFnvmdNum[4]; GetLen=sio_iqueue(port);//检查端口现有的字节数,也就是Pcomm缓冲区有多少数据 int tmp_ret=0; long GetLen; Sleep(2000); tmp_ret+=sio_read(k[3],ptrBufInF+tmp_ret,GetLen);//缓冲区数据读入数组并合并,这里可以循环多次} 当然你用mscomm也非常简单,采用mscomm的oncomm事件,例子如下:属于转载,非本人所写代码,但是用起来很方便void CSCommTestDlg::OnComm() { // TODO: Add your control notification handler code here VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed. CString strtemp; if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符 { ////////以下你可以根据自己的通信协议加入处理代码 variant_inp=m_ctrlComm.GetInput(); //读缓冲区 safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k=0;k<len;k++) safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组 for(k=0;k<len;k++) //将数组转换为Cstring型变量 { BYTE bt=*(char*)(rxdata+k); //字符型 strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放 m_strRXData+=strtemp; //加入接收编辑框对应字符串 } } UpdateData(FALSE); //更新编辑框内容 } mfc应用程序调用命令行工具实现输入输出通信 vc++CList控件中怎么实现选中一行 ~正则表达式求教!!! CEdit控件对象的指针(在线) 请高人指教! 怎样增加可用分?我的可用分少得可怜了! 如何将MDI中的一个Child Window置为TopMost opengl中怎么让绘制的物体大小随着相机视点的变化保持不变 关于游戏汉化(拦截API) MFC单文档程序的多个对话框显示顺序问题 请教一个函数调用的问题 在logoff的时候,哪些进程会被杀掉?(咨询Microsoft后也没有搞明白的问题)
这里是线程的启动代码,参数是我编的,你可以看看,第一个参数,是你的线程名称,第二个是一个句柄,可以申请安全句柄,第三个是线程的优先级
建议你使用pcomm,网上可以下到,很好,也简单,从pcomm入手,线程学会建立,就是上面的那一句代码就够了,很快就会掌握,不过可能会有很多实际的经验性问题,我做了两年串口,还是做的不怎么好
HWND hWnd1=GetSafeHwnd();
AfxBeginThread(ThreadProcA,hWnd1,THREAD_PRIORITY_NORMAL);
线程本身例子:
UINT ThreadProcA(LPVOID param)
{ char *ptrBufInF; char cFnvmdNum[4];
GetLen=sio_iqueue(port);//检查端口现有的字节数,也就是Pcomm缓冲区有多少数据
int tmp_ret=0;
long GetLen;
Sleep(2000); tmp_ret+=sio_read(k[3],ptrBufInF+tmp_ret,GetLen);//缓冲区数据读入数组并合并,这里可以循环多次
}
属于转载,非本人所写代码,但是用起来很方便
void CSCommTestDlg::OnComm()
{
// TODO: Add your control notification handler code here
VARIANT variant_inp;
COleSafeArray safearray_inp;
LONG len,k;
BYTE rxdata[2048]; //设置BYTE数组 An 8-bit integerthat is not signed.
CString strtemp;
if(m_ctrlComm.GetCommEvent()==2) //事件值为2表示接收缓冲区内有字符
{ ////////以下你可以根据自己的通信协议加入处理代码
variant_inp=m_ctrlComm.GetInput(); //读缓冲区
safearray_inp=variant_inp; //VARIANT型变量转换为ColeSafeArray型变量
len=safearray_inp.GetOneDimSize(); //得到有效数据长度
for(k=0;k<len;k++)
safearray_inp.GetElement(&k,rxdata+k);//转换为BYTE型数组
for(k=0;k<len;k++) //将数组转换为Cstring型变量
{
BYTE bt=*(char*)(rxdata+k); //字符型 strtemp.Format("%c",bt); //将字符送入临时变量strtemp存放
m_strRXData+=strtemp; //加入接收编辑框对应字符串
}
}
UpdateData(FALSE); //更新编辑框内容
}