yangyanzhao 2017-03-14 05:22 采纳率: 0%
浏览 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事件

    评论

报告相同问题?