首先为对话框添加了消息处理函数
void CtestDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
//一些操作
CDialog::OnTimer(nIDEvent);
}
然后在对话框的初始化程序initDialog中设置了定时器SetTimer(NULL,NULL,10000,NULL)
每隔10s执行一次OnTimer的操作,但是程序变得异常缓慢,如果设置的时间间隔大一点,就快一点。
但是,我需要设置为10s。另外,我也试了SetTimer用回调函数的办法,出现了同样的问题。各种纠结中……,跪求各位大神指导,感激涕零
MFC 对话框定时器
void CtestDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
//一些操作
CDialog::OnTimer(nIDEvent);
}
然后在对话框的初始化程序initDialog中设置了定时器SetTimer(NULL,NULL,10000,NULL)
每隔10s执行一次OnTimer的操作,但是程序变得异常缓慢,如果设置的时间间隔大一点,就快一点。
但是,我需要设置为10s。另外,我也试了SetTimer用回调函数的办法,出现了同样的问题。各种纠结中……,跪求各位大神指导,感激涕零
MFC 对话框定时器
解决方案 »
- WAV 中 waveOutUnprepareHeader调用的时机问题(需要的可以提供全部源码)
- 文件下载问题
- GetActiveWindow与GetForegroundWindow两者有何区别?
- 编写OCX控件的时候,怎么样在控件内使用ADO呢?
- 求教:如何刷新List Control控件不让其滚动?
- 关于mp3播放的一些问题,20分一个,,请大家指点。。。
- 四级没过没有学位,找工作中很重要吗?找人替考好,还是空手啊?望大家给个意见,替考还是决定不了
- xiaoqingyu(小青鱼)过来领分
- ActiveX里面怎么加试用限制?
- 申奥成功奖给我们带来什么?
- vc6.0 一个类的成员变量回调不显示
- 问个问题!关于我使用键盘监听的时候,360会报木马的一个大问题!
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer
)(HWND,
UINT,
UINT_PTR,
DWORD
)
);
nIDEvent那个参数请设置为非0值
void CtestDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(CheckInternetConnection)
{
MessageBox("请断开网络连接","");
}
CDialog::OnTimer(nIDEvent);
}
BOOL CheckInternetConnection()
{
WSADATA wsaData;
WORD wVersionRequested = MAKEWORD(2,2);
int nRet; // Init WinSock
nRet = WSAStartup(wVersionRequested, &wsaData);
if (nRet)
{
// return FALSE;
}
// Check version
if (wsaData.wVersion != wVersionRequested)
{
// return FALSE;
} // Go do the ping
if (Ping("www.sina.com.cn")||Ping("www.163.com"))
{
WSACleanup();
return TRUE;
}
// Free WinSock
WSACleanup();
return FALSE;
}BOOL Ping(LPCSTR pstrHost)
{
SOCKET rawSocket;
LPHOSTENT lpHost;
struct sockaddr_in saDest;
struct sockaddr_in saSrc;
DWORD dwTimeSent;
DWORD dwElapsed;
u_char cTTL;
int nLoop;
int nRet; // Create a Raw socket
rawSocket = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
if (rawSocket == SOCKET_ERROR)
{
return FALSE;
}
// Lookup host
lpHost = gethostbyname(pstrHost);
if (lpHost == NULL)
{
return FALSE;
}
// Setup destination socket address
saDest.sin_addr.s_addr = *((u_long FAR *) (lpHost->h_addr));
saDest.sin_family = AF_INET;
saDest.sin_port = 0; // Ping multiple times
for (nLoop = 0; nLoop < 2; nLoop++)
{
// Send ICMP echo request
SendEchoRequest(rawSocket, &saDest); // Use select() to wait for data to be received
nRet = WaitForEchoReply(rawSocket);
if (nRet == SOCKET_ERROR)
{
return FALSE;
}
if (!nRet)
{
return FALSE;
} // Receive reply
dwTimeSent = RecvEchoReply(rawSocket, &saSrc, &cTTL); // Calculate elapsed time
dwElapsed = GetTickCount() - dwTimeSent;
}
nRet = closesocket(rawSocket);
return TRUE;
}单次执行checkInternetConnection是没有问题的。
我的目的就是定时检测有没有联网,如果联网,就提示断开网络连接。
求帮助!
好像是deletetimer类似的。//一些操作
CDialog::OnTimer(nIDEvent);
然后再执行完后重新settimer
有没有比较快的检测联网状态的方法!