void* sync_engine_main_routine(void* data) { printf("Starting sync engine main routine...\n"); delay_sync = get_object_count_from_database(database); pthread_mutex_lock(&sync_mutex); while(!stop_running) { struct timespec ts; struct timeval tp; gettimeofday(&tp, NULL); /* Convert from timeval to timespec */ ts.tv_sec = tp.tv_sec; ts.tv_nsec = tp.tv_usec * 1000; ts.tv_sec += WAIT_TIME_SECONDS; printf("Sync engine blocked for %d seconds...\n",WAIT_TIME_SECONDS); pthread_cond_timedwait(&sync_cond, &sync_mutex, &ts); printf("Sync engine continues w/ current operations...\n"); if(!delay_sync) { if(process_local_changes()) { break; } } else { delay_sync = 0; } } pthread_mutex_unlock(&sync_mutex); return NULL; }
bool CSyncEngine::PerformSync() { //Lock(); ATLTRACE(_T("Performing sync\n")); ::ResetEvent(m_hDoSyncEvent); if (!m_delaySync && !m_dbResetDelay) { //for (int i = 0; i < 10000; i++ ) process_local_changes(); } else if (m_dbResetDelay) { /* reset db for next iteration */ reset_sync_db(); clear_client_id(); m_dbResetDelay = 0; m_delaySync = 0; } else { m_delaySync = 0; } //Unlock(); return true; }