你好!请看下代码,这段代码,我需要在死循环里运行,请问:

dl_zzc 2018-12-27 08:52:46
有啥问题没有?若改动,怎么改呢?谢谢了!

WORD wVersionRequested;
WSADATA wsaData;
SOCKET soc;
struct sockaddr_in addrSrv;
struct NTP_Packet NTP_Send,NTP_Recv;
struct timeval tv_out;
int sockaddr_Size;
SYSTEMTIME newtime;
float Splitseconds;
struct tm *lpLocalTime;
time_t ntp_time;

// USES_CONVERSION;
// LPCTSTR pszHostAddress = (LPCTSTR)m_data.Sntp_IP;
// LPSTR lpszAscii = T2A((LPTSTR)pszHostAddress);

// 初始化版本
wVersionRequested = MAKEWORD( 1, 1 );
if (0!=WSAStartup(wVersionRequested, &wsaData))
{
WSACleanup();
return;
}

if (LOBYTE(wsaData.wVersion)!=1 || HIBYTE(wsaData.wVersion)!=1)
{
WSACleanup( );
return;
}

// 这个IP是中国大陆时间同步服务器地址,可自行修改 202.120.2.101
soc=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
// struct sockaddr_in addrSrv;
// 65.55.21.19
// addrSrv.sin_addr.S_un.S_addr=inet_addr(lpszAscii);
addrSrv.sin_addr.S_un.S_addr=inet_addr("192.168.1.185");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(123);

NTP_Send.Control_Word = htonl(0x0B000000);
NTP_Send.root_delay = 0;
NTP_Send.root_dispersion = 0;
NTP_Send.reference_identifier = 0;
NTP_Send.reference_timestamp = 0;
NTP_Send.originate_timestamp = 0;
NTP_Send.receive_timestamp = 0;
NTP_Send.transmit_timestamp_seconds = 0;
NTP_Send.transmit_timestamp_fractions = 0;



if(SOCKET_ERROR==sendto(soc,(const char*)&NTP_Send,sizeof(NTP_Send),0,(struct sockaddr*)&addrSrv,sizeof(addrSrv)))
{
closesocket(soc);
return;
}

tv_out.tv_sec = 1;//等待1秒
tv_out.tv_usec = 0;
setsockopt(soc,SOL_SOCKET,SO_RCVTIMEO,(char*)&tv_out, sizeof(tv_out));

sockaddr_Size =sizeof(addrSrv);
if(SOCKET_ERROR==recvfrom(soc,(char*)&NTP_Recv,sizeof(NTP_Recv),0,(struct sockaddr*)&addrSrv,&sockaddr_Size))
{
closesocket(soc);
return;
}
closesocket(soc);
WSACleanup();


// 获取时间服务器的时间
ntp_time = ntohl(NTP_Recv.transmit_timestamp_seconds)-2208988800;
lpLocalTime = my_localtime(&ntp_time);
if(lpLocalTime == NULL)
{
return;
}

// 获取新的时间
newtime.wYear =lpLocalTime->tm_year+1900;
newtime.wMonth =lpLocalTime->tm_mon+1;
newtime.wDayOfWeek =lpLocalTime->tm_wday;
newtime.wDay =lpLocalTime->tm_mday;
newtime.wHour =lpLocalTime->tm_hour;
newtime.wMinute =lpLocalTime->tm_min;
newtime.wSecond =lpLocalTime->tm_sec;

// 设置时间精度
Splitseconds=(float)ntohl(NTP_Recv.transmit_timestamp_fractions);
Splitseconds=(float)0.000000000200 * Splitseconds;
Splitseconds=(float)1000.0 * Splitseconds;
newtime.wMilliseconds = (unsigned short)Splitseconds;
m_doIt = newtime.wMilliseconds;

// 修改本机系统时间
SetLocalTime(&newtime);

return;
...全文
94 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
dl_zzc 2018-12-27
  • 打赏
  • 举报
回复
发现内存泄露,不知道与这段代码循环调用是否有关?

19,504

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧