Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 何时触发OnTimer事件?_Visual C++ - Fatal编程技术网

Visual c++ 何时触发OnTimer事件?

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

谁能告诉我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);
静态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 );
...