コード例 #1
0
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;
}
コード例 #2
0
ファイル: CommonScheduleThread.cpp プロジェクト: Chero/abcwow
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;
}