コード例 #1
0
//----------------------------------------------------------------------
// affect
//----------------------------------------------------------------------
void EffectTransportCreature::affect(Creature* pCreature)
	throw(Error)
{
	__BEGIN_TRY

	Timeval      nextTime   = getNextTime();
	Timeval      deadLine   = getDeadline();
	Turn_t       RemainTime = deadLine.tv_sec - nextTime.tv_sec;

//	StringStream msg;
//	msg << (int)RemainTime << "초 후에 " << m_ZoneName << "로 이동됩니다.";

    char msg[50];
    sprintf(msg, g_pStringPool->c_str(STRID_TRANSPORT_CREATURE ),
                    (int)RemainTime,
                    m_ZoneName.c_str());

	string sMsg(msg);

	GCSystemMessage gcSystemMessage;
	gcSystemMessage.setMessage(sMsg);
	pCreature->getPlayer()->sendPacket(&gcSystemMessage);

	setNextTime(m_MessageTick);

	__END_CATCH
}
コード例 #2
0
// called by fmi2GetReal, fmi2GetInteger, fmi2GetBoolean, fmi2GetString, fmi2ExitInitialization
// if setStartValues or environment set new values through fmi2SetXXX.
// Lazy set values for all variable that are computed from other variables.
void calculateValues(ModelInstance *comp) {
    if (comp->state == modelInitializationMode) {
        eventQueue = malloc(sizeof(node_t));
        eventQueue->next = NULL;
        parseSequence(comp);
    }
    else {
        if (!isEmpty()) {
            double epsilon = 0.00000000001;
            long t = getTime();
            double v = getValue();
            while (!isEmpty() && comp->time > t) {
                getEvent();
                t = getTime();
                v = getValue();
                i(i_) = 0;
            }
            if ( comp->time < t )
                return;
            if (comp->time == t && i(i_) == 0) {
                if ( v < (r(input_) + epsilon) &&
                     v > (r(input_) - epsilon) ) {
                    b(output_) = fmi2True;
                    i(i_) = 1;
                }
                else {
                    b(output_) = fmi2False;
                    i(i_) = 1;
                }
            }
            else if (comp->time == t && i(i_) == 1) {
                if ( v < (r(input_) + epsilon) &&
                     v > (r(input_) - epsilon) ) {
                    b(output_) = fmi2True;
                }
                else {
                    if (getTime() == getNextTime()) {
                        getEvent();
                        t = getTime();
                        v = getValue();
                        if ( v < (r(input_) + epsilon) && v > (r(input_) - epsilon) ) {
                            b(output_) = fmi2True;
                        }
                        else {
                            b(output_) = fmi2False;
                        }
                    }
                }
            }
        }
    }
}
コード例 #3
0
ファイル: main.c プロジェクト: RushangKaria/FreeRTOS2
void Scheduler(void *pvParameters)	//dont use printf/ printk in this function... extremely dangerous
{
static int count=0;
int x;
int task_id;
	while(1)
	{
		if(EXECUTED<10)	//scheduler logic...dont put printk here...dangling pointers issue will arise and system will halt...uses a lot of internal work
		{
		x=getNextTime();
				//printk(KERN_ALERT "Next timer expires in %d\n",getExpireTime());
				//printf("Next timer expires for task %d\n",x);

		if(x!=80)			//error code --- no active timers
		vTaskPrioritySet(handles[x],4);	//else schedule
		EXECUTED++;			//keep track of how many RT task scheduled
		}
		else
		{
			for(x=0;x<10;x++)
			vTaskSuspend(handles[x]);		//suspend the tasks so that idle tasks get some execution time

		vTaskDelay(MAX_DELAY);			//suspend till next time frame


			for(x=0;x<10;x++)		//wake up RT tasks and reset their timers
			{
			vTimerReset(handles[x]);
			vTaskResume(handles[x]);
			}
		EXECUTED=0;			//reset their status

		}

	}


}