我编写了一个SOCKET编程TCP客服端程序,与我们的ARM通信,运行不到5分钟就会死掉。我用的是WHILE(1)死循环,应该不会死掉的。但是死掉啦,不论我是直接运行.EXE文件,还是调试运行。都一样死掉。TCP客服端程序,是个可以收发的程序,刚好与我们的ARM通信,通信是正常的。就是死掉啦。但是我们的ARM作为TCP服务器没有死掉,可以进行下次连接和通信的。
以下是提示信息:
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ws2_32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\secur32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ws2help.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mswsock.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\hnetcfg.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\usp10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\wshtcpip.dll', no matching symbolic information found.
The thread 0x13F8 has exited with code -1073741510 (0xC000013A).
The thread 0x15D0 has exited with code -1073741510 (0xC000013A).
The program 'F:\IC_Test\TcpClient\Debug\TcpClient.exe' has exited with code -1073741510 (0xC000013A).
下面是while(1)代码:
while(1){
i++;
if(i<8)
{
delayus(500);
sprintf(s,"%d",i);
send(sockClient,s,strlen(s)+1,0);//必须strlen(s)+1这个+1必须要写上,结束符的占一个字节
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
}
if((i<16)&(i>8))
{
delayus(8000);
sprintf(s,"%d",i);
send(sockClient,s,strlen(s)+1,0);//必须strlen(s)+1这个+1必须要写上,结束符的占一个字节
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
}
if(i>16)
{
delayus(50000);
i=0;
}
}
代码里面的delayus()是可以精确定时的US级的延时函数
代码如下:
void delayus(long int microsecond) //以微秒延时函数
{ _LARGE_INTEGER litmp;
LONGLONG QPart;
double dfFreq;
LONGLONG dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart / 1e6 ; // 获得计数器的时钟频率,以微秒为单位
QueryPerformanceCounter(&litmp);
QPart = litmp.QuadPart; // 获得时间初始值
do {
QueryPerformanceCounter(&litmp);
dfTim = (long int)((double)(litmp.QuadPart-QPart) / dfFreq) ; // 获得对应的时间值,单位为微秒
}while(dfTim< microsecond);
return ;
}谢谢专家给点提示。我不知道为什么运行一段时间就死掉啦?小弟谢谢您!
网络SOCKET编程,精确延时通信。
以下是提示信息:
Loaded 'ntdll.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\kernel32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ws2_32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\advapi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\rpcrt4.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\secur32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\msvcrt.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\ws2help.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\mswsock.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\hnetcfg.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\gdi32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\user32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\imm32.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\lpk.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\usp10.dll', no matching symbolic information found.
Loaded 'C:\WINDOWS\system32\wshtcpip.dll', no matching symbolic information found.
The thread 0x13F8 has exited with code -1073741510 (0xC000013A).
The thread 0x15D0 has exited with code -1073741510 (0xC000013A).
The program 'F:\IC_Test\TcpClient\Debug\TcpClient.exe' has exited with code -1073741510 (0xC000013A).
下面是while(1)代码:
while(1){
i++;
if(i<8)
{
delayus(500);
sprintf(s,"%d",i);
send(sockClient,s,strlen(s)+1,0);//必须strlen(s)+1这个+1必须要写上,结束符的占一个字节
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
}
if((i<16)&(i>8))
{
delayus(8000);
sprintf(s,"%d",i);
send(sockClient,s,strlen(s)+1,0);//必须strlen(s)+1这个+1必须要写上,结束符的占一个字节
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);
}
if(i>16)
{
delayus(50000);
i=0;
}
}
代码里面的delayus()是可以精确定时的US级的延时函数
代码如下:
void delayus(long int microsecond) //以微秒延时函数
{ _LARGE_INTEGER litmp;
LONGLONG QPart;
double dfFreq;
LONGLONG dfTim;
QueryPerformanceFrequency(&litmp);
dfFreq = (double)litmp.QuadPart / 1e6 ; // 获得计数器的时钟频率,以微秒为单位
QueryPerformanceCounter(&litmp);
QPart = litmp.QuadPart; // 获得时间初始值
do {
QueryPerformanceCounter(&litmp);
dfTim = (long int)((double)(litmp.QuadPart-QPart) / dfFreq) ; // 获得对应的时间值,单位为微秒
}while(dfTim< microsecond);
return ;
}谢谢专家给点提示。我不知道为什么运行一段时间就死掉啦?小弟谢谢您!
网络SOCKET编程,精确延时通信。
if (i < 8)
...
else if (i < 16)
...
else
...
sprintf(s,"%d",i);
printf("%s\n", s);
send(sockClient,s,strlen(s)+1,0);//必须strlen(s)+1这个+1必须要写上,结束符的占一个字节
recv(sockClient,recvBuf,100,0);
printf("%s\n",recvBuf);另外,判断send和recv的返回值
http://download.csdn.net/detail/geoff08zhang/4571358