回 帖 发 新 帖 刷新版面

主题:新手求助,关于父窗口自动响应问题

我以前是做单片机程序的,最近想自学一下Vc++.
假设单片机里的主函数有一个while(1){}
其他功能通过中断函数来完成,
移植到Vc++,
父窗口里假设有若干个按键,每个按键的程序,是不是相当于单片机里的中断程序,点某个按键,就执行这个按键里的程序。
可是父窗口里的怎样实现while(1)的主函数功能呢?
用多线程可以解决,不过现在我还没学到那里,想单线程是否能解决它。
想在父窗口里做一个一直检测,不得其法。

下面是父窗口的程序
BOOL CJZTESTView::OnCommand(WPARAM wParam, LPARAM lParam) 
{
    WORD nCode=HIWORD(wParam);
    WORD nID=LOWORD(wParam);
    
    if((nID==IDC_BUTTON_Jump)&&(nCode==BN_CLICKED))MessageBox("按下了某键");
    show_RunTime();
    OnButtonJump();
    return CRecordView::OnCommand(wParam, lParam);
}

void CJZTESTView::show_RunTime()
{
    unsigned char showHour,showMin;
    DWORD dwmin,dwTime;
    CString strShowTime;

    dwNowTime=GetTickCount();
    dwmin=dwNowTime-dwFirstTime;
    dwmin=dwmin/1000;
    dwTime=dwmin % 60;
    showSec=(unsigned char)dwTime;
    dwmin=dwmin/60;
    dwTime=dwmin%60;
    showMin=(unsigned char)dwTime;
    dwTime=dwmin/60;
    showHour=(unsigned char)dwTime;
    strShowTime.Format("%d:%d:%d",showHour,showMin,showSec);
    m_strRunTime=strShowTime;
}
void CJZTESTView::OnButtonJump() 
{
}
父窗口OnCommand函数里,调用OnButtonJump,不能实现while(1)的功能。
若OnButtonJump函数里有MessageBox()的可执行函数,那么执行完OnButtonJump后,能回到父窗口,再次调用OnButtonJump,实现里类似while(1)功能。如果OnButtonJump函数里没有MessageBox()的语句,执行完OnButtonJump后,父窗口得不到响应。
我的本意是:程序空闲时,一直检测当前时间,满足某个条件,就执行某段程序。这个检测时间程序放在哪里好呢?也就是说,不影响父窗口里的其他子按钮功能,又能一直自动检测时间。
请教各位大侠~多谢!

回复列表 (共2个回复)

沙发

VC里本身有settimer可以做定时器。
如果是单线程就不要调用MessageBox。

板凳

消息响应,也就是你发出一个什么消息就实现相应的功能,可以想象下随便一个软件的功能的操作过程。如果自动检测的话,可以响应WM_TIMER,如楼上说的,设置定时器,每隔多长时间检测一次。当然也可以自己写线程,实现都差不多的。

我来回复

您尚未登录,请登录后再回复。点此登录或注册