本文整理汇总了C++中mutex::run方法的典型用法代码示例。如果您正苦于以下问题:C++ mutex::run方法的具体用法?C++ mutex::run怎么用?C++ mutex::run使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类mutex
的用法示例。
在下文中一共展示了mutex::run方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: if
Keyboard( double const xDebounceTicks = 18000000.0 )
: mM( )
, mQuit( )
, mCallbacks( )
, mInitialized( false )
, mKeyboardListener( [ & ] ( int64_t const xSleepIntervalNs ) -> uint32_t
{
bool pressedLastTime[ SDL_NUM_SCANCODES ];
for ( uint16_t ii = 0; ii < SDL_NUM_SCANCODES; ++ii )
{
pressedLastTime [ ii ] = false;
}
double continueDebounceAccum = 0.0;
Stopwatch t;
while ( !mQuit.isSet( ) )
{
if ( xSleepIntervalNs > 0 )
{
sleep::ns( xSleepIntervalNs );
}
const Uint8 * state = SDL_GetKeyboardState( NULL );
for ( uint16_t ii = 0; ii < SDL_NUM_SCANCODES; ++ii )
{
eKeyState keyState = eKeyState_None;
auto runCallbacks = [&]()
{
mM.run([&]( )
{
for ( auto callback : mCallbacks )
{
callback( KeyboardEvent( keyState, ii, state ) );
}
});
};
if ( state[ ii ] && !pressedLastTime[ ii ] )
{
keyState = eKeyState_Down;
t.startMs( );
}
else if ( state[ ii ] && pressedLastTime[ ii ] )
{
continueDebounceAccum += t.stop( );
if ( continueDebounceAccum > mDebounceTicks )
{
keyState = eKeyState_Continue;
continueDebounceAccum = 0;
t.startMs( );
}
}
else if ( !state[ ii ] && pressedLastTime[ ii ] )
{
keyState = eKeyState_Up;
}
if ( keyState != eKeyState_None )
{
runCallbacks( );
}
pressedLastTime[ ii ] = state[ ii ];
}
}
})
, mDebounceTicks( xDebounceTicks )
{
SISULOG( "In Keyboard Ctor" );
}
示例2: registerCallback
void registerCallback( OnKeyboardEventCallback xCallback )
{
mM.run([&]() { mCallbacks.push_back( xCallback ); });
}