yangyanzhao 2017-03-14 05:22 采纳率: 87.5%
浏览 925
已结题

SOCKET RECV等待TIMER信号返回

我在程序中设置了一个TIMER
int loop = 0;
char bufRecv[MAX_PACKET];
char tempBuf[4096];
//int flag=recv(socketTCP[key], bufRecv, strlen(bufRecv), 0);
int flag = recv(socketTCP, bufRecv, strlen(bufRecv)+1, 0);
//MessageBox(NULL, (LPCWSTR)bufRecv, (LPCWSTR)"back", 0);
int temp12 = strlen(bufRecv);
for (int i = 0; i tempBuf[i] = bufRecv[i];
}
while (temp12>MAX_PACKET){
loop++;
flag = recv(socketTCP, bufRecv, MAX_PACKET, 0);
//temp12 = strlen(bufRecv) - MAX_PACKET*loop;
temp12 = strlen(bufRecv);
for (int i = 0; i < flag; i++){
tempBuf[i + MAX_PACKET*loop] = bufRecv[i];
}
}

if (flag <= 0){
    int temp1 = WSAGetLastError();
    printf("receive data error");
    return -1;
}
//backData = (unsigned char*)tempBuf;
string backStr = "recv data from server ";
backStr += tempBuf;
//backData = new unsigned char[3036];
int i = 0;
for (i = 0; i < backStr.length(); i++){
    backData[i] = backStr[i];
}
backData[i] = '\0';
index = findIndexNum(backData);
//backData = (unsigned char*)backStr.c_str();
//printf("recv data from server:%s", bufRecv);
printf("recv data from server:%s", backData);
ResumeThread(recvThread);
正常收发数据时线程总是在等这个TIMER时间中的SEND,导致由于回应报文被阻塞而程序卡死
  • 写回答

1条回答 默认 最新

  • yangyanzhao 2017-03-14 05:33
    关注

    自己顶,补充
    static void Timer2Proc(HWND hWnd, UINT nMsg, UINT nTimerid, DWORD dwTime, NetSocket *pThis)
    {
    int err;
    byte buf[3036] = "";
    char recvbuf[32] = "connect!!";
    byte back[3036] = {};
    memset(buf, 0, sizeof(buf));
    if (pThis == NULL) return;
    //SetTimer(NULL, 1, 10000, (TIMERPROC)SocketTimeOut);

    err = pThis->pThis->Send(buf, back, 0, sizeof(buf));
    if (back[0] != '\0'){
    //KillTimer(NULL, 1);
    }else{
    pThis->pThis->Connect2(pThis->pThis->sIP, pThis->pThis->port);
    }
    }这是TIMER事件

    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器