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++项目中的输入超时的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual C++ 2008 中将 MFC 应用程序项目添加到 Win32 应用程序项目