uint8_t WaiteForState( uint8_t bState, uint32_t ulTimeOut) { kick_watchdog(); SetTimeoutValue( ulTimeOut ); while ( GetTimeoutValue() ) { if (mbRadioStatus == bState) return 0; // 0 = alles ok - gewünschter State ist erreicht } return 1; // 1 = Timeout abgelaufen }
const FileStatusCacheEntry * GitFolderStatus::GetCachedItem(const CTGitPath& filepath) { sCacheKey.assign(filepath.GetWinPath()); FileStatusMap::const_iterator iter; const FileStatusCacheEntry *retVal; if(m_mostRecentPath.IsEquivalentTo(CTGitPath(sCacheKey.c_str()))) { // We've hit the same result as we were asked for last time CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) _T(": fast cache hit for %s\n"), filepath.GetWinPath()); retVal = m_mostRecentStatus; } else if ((iter = m_cache.find(sCacheKey)) != m_cache.end()) { CTraceToOutputDebugString::Instance()(_T(__FUNCTION__) _T(": cache found for %s\n"), filepath.GetWinPath()); retVal = &iter->second; m_mostRecentStatus = retVal; m_mostRecentPath = CTGitPath(sCacheKey.c_str()); } else { retVal = NULL; } if(retVal != NULL) { // We found something in a cache - check that the cache is not timed-out or force-invalidated DWORD now = GetTickCount(); if ((now >= m_TimeStamp)&&((now - m_TimeStamp) > GetTimeoutValue())) { // Cache is timed-out CTraceToOutputDebugString::Instance()(__FUNCTION__ ": Cache timed-out\n"); ClearCache(); retVal = NULL; } else if(WaitForSingleObject(m_hInvalidationEvent, 0) == WAIT_OBJECT_0) { // TortoiseGitProc has just done something which has invalidated the cache CTraceToOutputDebugString::Instance()(__FUNCTION__ ": Cache invalidated\n"); ClearCache(); retVal = NULL; } return retVal; } return NULL; }