大家好,最近要做一个VC++的模拟程序。要求可以“同时”给多个COM口发送数据。由于我对VC++中的线程还不是很熟悉。所以请问那位高手可以指点提示一下。能给些启发性的例子更好。
     小女子先谢谢大家了,第一次提问。还请大家支持一下!!!

解决方案 »

  1.   

    http://www.vckbase.com/  很多串口编程得例子,改一下就可以了
      

  2.   

    afxBeginthread(threadproc ,hwnd,priority)
    这里是线程的启动代码,参数是我编的,你可以看看,第一个参数,是你的线程名称,第二个是一个句柄,可以申请安全句柄,第三个是线程的优先级
    建议你使用pcomm,网上可以下到,很好,也简单,从pcomm入手,线程学会建立,就是上面的那一句代码就够了,很快就会掌握,不过可能会有很多实际的经验性问题,我做了两年串口,还是做的不怎么好
      

  3.   

    DISCIP_1(宝贝)您好,刚才给你写了很多的话语,没有料到不能发送,请问你的msn是多少?可否指点一下!!
      

  4.   

    申请线程的例子:
    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);//缓冲区数据读入数组并合并,这里可以循环多次
    }
      

  5.   

    当然你用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); //更新编辑框内容 
    }