bool CommonScheduleThread::run() { Log.Success("CommonScheduleThread", "Started."); m_busy = false; if(sWorld.BCSystemEnable && sWorld.BCOrderMode == 1) itOrderMSGEntry = objmgr.GetBCTotalItemBegin(); // cebernic nothing in storage if(objmgr.IsBCEntryStorageEmpty()) sWorld.BCSystemEnable = 0; BCTimerCount = getMSTime() + ((uint32)sWorld.BCInterval * 1000); while(GetThreadState() != THREADSTATE_TERMINATE) { m_busy = true; // do job ------------------- BroadCastExec(); // ----------------------- m_busy = false; if(GetThreadState() == THREADSTATE_TERMINATE) break; cond.Wait(THREAD_LOOP_INTERVAL * 1000); if(!m_running) break; } return true; }
bool CommonScheduleThread::run() { Log.Notice("CommonScheduleThread", "Started."); m_busy = false; if ( sWorld.BCSystemEnable && sWorld.BCOrderMode==1 ) itOrderMSGEntry = objmgr.GetBCTotalItemBegin(); // cebernic nothing in storage if ( objmgr.IsBCEntryStorageEmpty() ) sWorld.BCSystemEnable = 0; #ifdef WIN32 m_abortEvent = CreateEvent(NULL, NULL, FALSE, NULL); #else struct timeval now; struct timespec tv; pthread_mutex_init(&abortmutex,NULL); pthread_cond_init(&abortcond,NULL); #endif BCTimerCount = getMSTime() + ((uint32)sWorld.BCInterval*1000); while(ThreadState != THREADSTATE_TERMINATE) { m_busy=true; // do job ------------------- BroadCastExec(); // ----------------------- m_busy=false; if(ThreadState == THREADSTATE_TERMINATE) break; #ifdef WIN32 if (m_abortEvent) WaitForSingleObject(m_abortEvent, THREAD_LOOP_INTERVAL*1000); #else gettimeofday(&now, NULL); tv.tv_sec = now.tv_sec + THREAD_LOOP_INTERVAL; tv.tv_nsec = now.tv_usec * 1000; pthread_mutex_lock(&abortmutex); pthread_cond_timedwait(&abortcond, &abortmutex, &tv); pthread_mutex_unlock(&abortmutex); #endif if(!m_running) break; } #ifdef WIN32 if (m_abortEvent) CloseHandle(m_abortEvent); #else pthread_mutex_destroy(&abortmutex); pthread_cond_destroy(&abortcond); #endif return true; }