win32 C++项目中的输入超时

Posted

技术标签:

【中文标题】win32 C++项目中的输入超时【英文标题】:Timing out input in win32 C++ Project 【发布时间】:2012-12-13 20:07:42 【问题描述】:

如果按键之间的时间过长,我正在尝试找出使输入超时的最佳方法。我应该创建一个cheatTime 浮点数,每次调用更新都会增加增量吗?很晚了,我累了,我的大脑被炸了。任何帮助,将不胜感激。 m_pDI 是一个 DirectInput 包装对象。在该类中,我有一个 ClearInput() 函数,它将清除其缓冲区内的任何输入。

if( m_pDI->KeyDown( DIK_TAB ) && m_pDI->KeyDown( DIK_1 ) )
    
        if( m_pDI->KeyDown( DIK_H ) )
        
            m_bGameCheats[ 0 ] = true;
            if( !m_pXA->SFXIsSoundPlaying( m_nCheatSoundID ) )
                m_pXA->SFXPlaySound( m_nCheatSoundID, false );
        
        else if( m_pDI->KeyDown( DIK_C ) )
        
            m_bGameCheats[ 1 ] = true;
            if( !m_pXA->SFXIsSoundPlaying( m_nCheatSoundID ) )
                m_pXA->SFXPlaySound( m_nCheatSoundID, false );
        
        else if( m_pDI->KeyDown( DIK_S ) )
        
            m_bGameCheats[ 2 ] = true;
            if( !m_pXA->SFXIsSoundPlaying( m_nCheatSoundID ) )
                m_pXA->SFXPlaySound( m_nCheatSoundID, false );
        
    

【问题讨论】:

【参考方案1】:

请告诉我我的问题是否正确。两种情况:

1:你只想在按下A之后再按下B时做某事,除非2之间的时间太长。

在这种情况下,只要按下 A,就存储时间。当按下 B 时,检查上次按下 A 的时间。

2:如果在按下 A 之后按下 B,你想做一件事,如果按下 A 之后没有按下 B,你想做另一件事。

由于在A被按下后等待超时才知道B没有被按下,所以你需要在A被按下时立即开始超时,并在再次按下A时重新启动它。实现可能是基于事件的,如果您有一个基于时间框架的运行循环,则基于定期检查,或者如果应用程序/线程没有做太多,则基于繁忙的轮询循环。

投票看起来像这样:

void AIsPressed()

    mLastTimeAWasPressed = clock();


bool HasTooMuchTimePassedSinceAWasPressed()

    return (clock() - mLastTimeAWasPressed) > (mTimeout * CLOCKS_PER_SEC)

【讨论】:

以上是关于win32 C++项目中的输入超时的主要内容,如果未能解决你的问题,请参考以下文章

win32 (C++) 中的动画和事件问题

编辑控件不会获得焦点! win32 c++

如何在 Visual C++ 2008 中将 MFC 应用程序项目添加到 Win32 应用程序项目

C++ Win32 中的 C# DateTime.ToUniversalTime() [关闭]

Win32 (C++) 中的选项卡损坏

删除 C++ Win32 中的标准窗口框架