Visual c++ 何时触发OnTimer事件?
谁能告诉我OnTimer事件何时被触发? (VC++新增) (很抱歉格式错误) //iSCSIDlg.h:头文件 定义WM_RECVDATA WM_USER+1 CISCSIDlg类:公共CDialog { 公众: 布尔·穆特斯特兰德; 布尔穆阿克; bool m_testProc; 布尔m_断开连接; BOOL InitSocket(); CISCSIDlg(CWnd*pParent=NULL); 静态DWORD WINAPI RecvProc(LPVOID lpParameter);Visual c++ 何时触发OnTimer事件?,visual-c++,Visual C++,谁能告诉我OnTimer事件何时被触发? (VC++新增) (很抱歉格式错误) //iSCSIDlg.h:头文件 定义WM_RECVDATA WM_USER+1 CISCSIDlg类:公共CDialog { 公众: 布尔·穆特斯特兰德; 布尔穆阿克; bool m_testProc; 布尔m_断开连接; BOOL InitSocket(); CISCSIDlg(CWnd*pParent=NULL); 静态DWORD WINAPI RecvProc(LPVOID lpParameter); 静态D
静态DWORD WINAPI发送测试(LPVOID lpParameter) 受保护: afx_msg void OnTimer(UINT nIDEvent); 声明消息映射() }) 类别CAboutDlg:公共CDialog { 公众: CAboutDlg(); 枚举{IDD=IDD_ABOUTBOX}; 受保护的: 虚拟数据交换(CDATA交换*pDX) 受保护: 声明消息映射() }; CAboutDlg::CAboutDlg():CDialog(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDATA Exchange*pDX) { CDDialog::DoDataExchange(pDX); } 开始消息映射(CAboutDlg、CDialog) 结束消息映射() CISCSIDlg::CISCSIDlg(CWnd*pParent) :CDialog(CISCSIDlg::IDD,pParent) { m_srvPort=0; m_cmd=-1; m_参数1=0; m_hIcon=AfxGetApp()->加载图标(IDR_大型机); } void CISCSIDlg::DoDataExchange(CDATA Exchange*pDX) { CDDialog::DoDataExchange(pDX); DDX_控制(pDX、IDC_BTN_连接、m_BTN连接); DDX_控制(pDX、IDC_BTN_发送、m_BTN发送); DDX_文本(pDX、IDC_编辑_端口、m_srvPort); DDX_无线电(pDX、IDC_无线电0、m_cmd); DDX_文本(pDX、IDC_EDIT1、m_param1); } 开始消息映射(CISCSIDlg、CDialog) 关于\u WM\u SYSCOMMAND() 关于油漆 关于_WM_QUERYDRAGICON() 单击时(IDC连接、ONBTN连接) 点击时(IDC发送、ONBTN发送) 点击(IDC_Radio 0,OnRadio) 关于\u WM\u计时器() ON_消息(WM_RECVDATA,OnRecvData) 结束消息映射() BOOL-CISCSIDlg::OnInitDialog() { CDialog::OnInitDialog(); CMenu*pSysMenu=GetSystemMenu(FALSE); 如果(pSysMenu!=NULL) { CString strAboutMenu; strAboutMenu.LoadString(ID_ABOUTBOX); 如果(!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_分隔符); pSysMenu->AppendMenu(MF_字符串、IDM_ABOUTBOX、strAboutMenu); } } 更新数据(假); GetDlgItem(IDC_EDIT1)->显示窗口(SW_HIDE); GetDlgItem(IDC_EDIT2)->显示窗口(SW_HIDE); 返回TRUE; } void CISCSIDlg::OnSysCommand(UINT-nID,LPARAM-LPARAM) { if((nID&0xFFF0)=IDM_ABOUTBOX) { 卡布特德尔加布特; dlgAbout.DoModal(); } 其他的 { CDialog::OnSysCommand(nID,lParam); } } void CISCSIDlg::OnPaint() { } HCURSOR CISCSIDlg::OnQueryDragIcon() { 返回(HCURSOR)m_hIcon; } DWORD WINAPI CISCSIDlg::RecvProc(LPVOID lpParameter) { SOCKET sock=((RECVPARAM*)lpParameter)->sock; HWND HWND=((RECVPARAM*)lpParameter)->HWND; 删除参数
unsigned char recvBuf[1500];
unsigned char tempBuf[1500];
int retval;
while(TRUE)
{
memset(recvBuf,0,sizeof(recvBuf));
retval=recv(sock,(char *)recvBuf,1500,0);
memcpy(tempBuf,recvBuf,1500);
::PostMessage(hwnd,WM_RECVDATA,0,(LPARAM)tempBuf);
}
return 0;
}
void CISCSIDlg::OnRecvData(WPARAM WPARAM,LPARAM LPARAM)
{
}
void CISCSIDlg::onbtnconconnect()
{
}
void CISCSIDlg::OnBtnSend()
{
}
void CISCSIDlg::OnTimer(UINT-nIDEvent)
{
if(nIDEvent==1)
{
超时--;
if(timeoutinertString(0,toShow);
}
}
}
CDialog::OnTimer(nIDEvent);
}在上载的代码中,不会调用OnTimer。为了调用OnTimer,必须对SetTimer进行初始调用
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer) ( HWND, UINT, UINT_PTR, DWORD )
);
可以在OnInitDialog()中进行此调用:
有关更多详细信息,请参阅MSDN文章:
在上载的代码中,不会调用OnTimer。为了调用OnTimer,必须对SetTimer进行初始调用
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer) ( HWND, UINT, UINT_PTR, DWORD )
);
可以在OnInitDialog()中进行此调用:
有关更多详细信息,请参阅MSDN文章:
很好,我找到了这行SetTimer(2500,空);很好,我找到了这行SetTimer(2500,空);
CTime time=CTime::GetCurrentTime();
if(msg[12]==0)
{
}
else
{
send(m_socket,(char*)tmp_buf,32,0);
}
if(msg[12]==0 && m_testProc)
{
SetDlgItemText(IDC_ERR,temp);
}
else
if(msg[12]==0 && m_testrand)
{
}
else
if(m_testProc || m_testrand)
m_ack=true;
send(m_socket,(char*)msg_header,cmdSize+16,0);//kh 2
if(nIDEvent==1)
{
timeout--;
if(timeout<0)
{
KillTimer(1);
flag_test_ready=0;
AfxMessageBox("xxx");
}
}
if(nIDEvent==2)
{
unsigned char testBuf[100];
int testSize=16;
memset(testBuf,0,sizeof(testBuf));
testBuf[0]=0xa5;
if(m_testrand && m_isConnect )
{
if(m_ack)
{
m_ack=false;
unsigned char msg_header[16+100];
send(m_socket,(char*)msg_header,16+testSize,0);
CString toShow,temp;
CTime time=CTime::GetCurrentTime();
toShow.Format("rand:%2d:%2d:%2d cmd(%2x):--",time.GetHour(),time.GetMinute(),time.GetSecond(),testBuf[0]);
for( i=0;i<testSize+16;i++)
{
temp.Format(" %2x",msg_header[i]);
toShow+=temp;
if(i%8==7)
{
((CListBox*)GetDlgItem(IDC_LIST_MSG))->InsertString(0,toShow);
toShow.Empty();
toShow.Format("rand:%2d:%2d:%2d cmd(%2x):--",time.GetHour(),time.GetMinute(),time.GetSecond(),testBuf[0]);
}
}
if(i%8!=0)
((CListBox*)GetDlgItem(IDC_LIST_MSG))->InsertString(0,toShow);
}
}
}
CDialog::OnTimer(nIDEvent);
UINT_PTR SetTimer(
UINT_PTR nIDEvent,
UINT nElapse,
void (CALLBACK* lpfnTimer) ( HWND, UINT, UINT_PTR, DWORD )
);
...
//TODO: Add extra initialization here
// +---------------- Some unique identifier, to differentiate timers
// | +--------- The timeout value,
// | | +---- A callback - NULL in this case because of WM_TIMER
// | | |
// V V V
SetTimer( 9001, 2000, NULL );
...