• 好的代码,发送包大于200后分成几次发送



    CP5200API int CALLING_CONV CP5200_RS232_SendInstantMessage1( BYTE nCardID, BYTE byPlayTimes , int x , int y , int cx , int cy , int nFontSize , byte byColorAlign , int nEffect , BYTE nSpeed , BYTE byStayTime ,const char* pText )
    {
    AFX_MANAGE_STATE(AfxGetStaticModuleState());
    int nRet = 0;
    int nDataLen = (int)(strlen(pText)) + 1 + 22 ;
    BYTE *pData = (BYTE*)malloc(nDataLen);
    if ( pData != NULL )
    {
    nDataLen = CP5200_MakeInstantMessageData1( pData , nDataLen , byPlayTimes , x,y,cx,cy,nFontSize , byColorAlign,nEffect,nSpeed,byStayTime,pText);
    if ( nDataLen > 0)
    {
    int nOpen = 0;
    if(CP5200_RS232_IsOpened())
    nOpen = 2;
    else if(CP5200_RS232_Open())
    nOpen = 1;

    if ( nOpen )
    {
    HOBJECT hObj= CP5200_CommData_Create(COMMDATA_TYPE_RS232, nCardID, GetIDCode());
    int nOffset = 0;
    int nRemainLen = nDataLen;
    long lDataOffset = 0;
    while(nRemainLen>0) //将制作出来的数据封包发送,200个字节一包
    {
    BYTE bySendBuf[512] = {0};
    int nLen = 0;
    BYTE byLastPacket = 0;
    if ( nRemainLen > 200 )
    {
    nLen = 200;
    nRemainLen = nRemainLen-200;
    byLastPacket = 0;
    }
    else
    {
    nLen = nRemainLen;
    nRemainLen = 0;
    byLastPacket = 1;
    }

    int nSendLen = CP5200_MakeSendInstantMessageData(hObj, bySendBuf, sizeof(bySendBuf) , pData + nOffset , nLen , byLastPacket , lDataOffset );
    gRs232.WriteData(bySendBuf, nSendLen);
    BYTE byRec[512] = {0};
    int nRecLen = gRs232.ReceiveData(byRec, sizeof(byRec));
    if(nRecLen>0)
    {
    BYTE byBuf[12] = {0};
    CP5200_ParseSendInstantMessageRet(hObj, byRec, nRecLen, byBuf, sizeof(byBuf));
    if( byBuf[0] != 0) //成功
    {
    lDataOffset = byBuf[1] + (byBuf[2]<<8) + (byBuf[3]<<16) + (byBuf[4]<<24);
    if ( byLastPacket == 1)
    nRet = 1;
    }
    }

    nOffset += nLen;
    Sleep(10); //每发送一包休眠10毫秒
    }

    if(nOpen == 1)
    {
    gRs232.Close();
    }

    CP5200_CommData_Destroy(hObj);
    }
    }
    free(pData);
    }
    return nRet;
    }

  • 相关阅读:
    Linux下分析某个进程CPU占用率高的原因
    Linux下查看某一进程所占用内存的方法
    jbd2导致系统IO使用率高问题
    Linux iotop命令详解
    1.Redis详解(一)------ redis的简介与安装
    Redis详解(十三)------ Redis布隆过滤器
    12.Redis详解(十二)------ 缓存穿透、缓存击穿、缓存雪崩
    面试问题总结
    算法与数据结构基础<二>----排序基础之插入排序法
    CarSim、Adams、Cruise和Simulink四款仿真软件的对比
  • 原文地址:https://www.cnblogs.com/chenzuoyou/p/3376551.html
Copyright © 2020-2023  润新知