TInt CConvertTimeViaServer::CreateAndRunTestUnitL() { TTime t; TInt errUTC = KErrNone; TInt errLocal = KErrNone; // Instantiate Converter User::LeaveIfError(iTimeZoneServer.Connect()); // Set home location TInt err = CDstIntUtils::SetHomeTimeZoneL(iCityName, iTimeZoneServer); if (iSystemLocalTime != Time::NullTTime()) { iTimeZoneServer.SetHomeTime(iSystemLocalTime); } if(err != KErrNone) { TBuf8<64> txt; txt.Append(_L8("Zone not set: ")); txt.Append(iCityName); TBuf<64> txtmsg; txtmsg.Copy(txt); LogCheck(txtmsg, err); } else { // Handle UTC to local conversion if((iConversion == EConvertUTC) || (iConversion == EConvertBoth)) { t = iUTCTime; errUTC = iTimeZoneServer.ConvertToLocalTime(t); if(errUTC == KErrNone) { errUTC = CompareTimesL(t, EConvertUTC); } } // Handle local to UTC conversion if((iConversion == EConvertLocal) || (iConversion == EConvertBoth)) { t = iLocalTime; errLocal = iTimeZoneServer.ConvertToUniversalTime(t); if(errLocal == KErrNone) { errLocal = CompareTimesL(t, EConvertLocal); } } if(errUTC != KErrNone) err = errUTC; if(errLocal != KErrNone) err = errLocal; } return err; }
TInt CConvertTimeViaServer::CompareTimesL(TTime t, TConversion aConversion) { TInt err = KErrNone; TBuf<128> txt; txt.Zero(); switch(aConversion) { case EConvertUTC: if(t != iLocalTime) { err = KErrGeneral; CDstIntUtils::AppendTimeParamStringL(iUTCTime, txt); txt.Append(_L(" UTC to ")); CDstIntUtils::AppendTimeParamStringL(iLocalTime, txt); txt.Append(_L(" local, received ")); CDstIntUtils::AppendTimeParamStringL(t, txt); LogCheck(txt, err); } break; case EConvertLocal: if(t != iUTCTime) { err = KErrGeneral; CDstIntUtils::AppendTimeParamStringL(iLocalTime, txt); txt.Append(_L(" local to ")); CDstIntUtils::AppendTimeParamStringL(iUTCTime, txt); txt.Append(_L(" UTC, received ")); CDstIntUtils::AppendTimeParamStringL(t, txt); LogCheck(txt, err); } break; default: err = KErrNotFound; txt.Append(_L("Unknown conversion")); LogCheck(txt, err); break; } return err; }
/** * Function : Simulation * Description : simulate doctor working * Input : * Output : nothing * return : OK or ERROR */ void Simulation(Queue_Pat *Prio_Que) { time_t nowtime ; struct tm *timeinfo ; Pat patient; //记录当前就诊病人 int i; while(TRUE) { time(&nowtime) ; timeinfo = localtime(&nowtime) ; printf("\t\t\t\t当前为仿真系统\n\n"); if(!PriorityQue_Empty(*Prio_Que)) { //队列不空 patient = (Prio_Que->base)[1] ; //提取当前就诊病人 Priority_DeletMin(Prio_Que); //优先级高的病人出队列 QueueAdjust(Prio_Que); //调整队列 while(hour * (timeinfo->tm_hour - patient.arrive_time -> tm_hour) + timeinfo -> tm_min - patient.arrive_time -> tm_min < /*patient.pat_condition*/1 ) { //未达到预计就诊时间 Pat_LeaveJudge(Prio_Que); //病人离开检查 }//while //优先级更新 QueueAdjust(Prio_Que); if(Prio_Que->length) { for(i = 1 ; i <= Prio_Que->length ; i ++) { //优先级更新 (Prio_Que->base)[i].key = Cal_Priority((Prio_Que->base)[i]); } HeapSort(Prio_Que); //优先级重排 }//if }//if system("cls"); LogCheck(); printf("\n正在等待更新..."); Sleep(60*1000); } }
TInt CConvertTime::CreateAndRunTestUnitL() { TTime t; TInt converterErrUTC = KErrNone; TInt rulesErrUTC = KErrNone; TInt converterErrLocal = KErrNone; TInt rulesErrLocal = KErrNone; User::LeaveIfError(iTimeZoneServer.Connect()); // Set home location TInt err = CDstIntUtils::SetHomeTimeZoneL(iCityName, iTimeZoneServer); if (iSystemLocalTime != Time::NullTTime()) { iTimeZoneServer.SetHomeTime(iSystemLocalTime); } // Instantiate Converter CTzConverter *converter = CTzConverter::NewL(iTimeZoneServer); CleanupStack::PushL(converter); CTzId* tzId = CTzId::NewL(iCityName); CleanupStack::PushL(tzId); CTzRules* rules = iTimeZoneServer.GetTimeZoneRulesL(*tzId, TDateTime(0, EJanuary, 0, 0, 0, 0, 0), TDateTime(9999, EJanuary, 0, 0, 0, 0, 0), ETzWallTimeReference); CleanupStack::PopAndDestroy(tzId); CleanupStack::PushL(rules); if(err != KErrNone) { TBuf8<64> txt; txt.Append(_L8("Zone not set: ")); txt.Append(iCityName); TBuf<64> txtmsg; txtmsg.Copy(txt); LogCheck(txtmsg, err); } else { // Handle UTC to local conversion if((iConversion == EConvertUTC) || (iConversion == EConvertBoth)) { t = iUTCTime; converterErrUTC = converter->ConvertToLocalTime(t); if(converterErrUTC == KErrNone) { converterErrUTC = CompareTimesL(t, EConvertUTC); } t = iUTCTime; TRAP(rulesErrUTC, rules->ConvertToLocalL(t)); if(rulesErrUTC == KErrNone) { rulesErrUTC = CompareTimesL(t, EConvertUTC); } } // Handle local to UTC conversion if((iConversion == EConvertLocal) || (iConversion == EConvertBoth)) { t = iLocalTime; converterErrLocal = converter->ConvertToUniversalTime(t); if(converterErrLocal == KErrNone) { converterErrLocal = CompareTimesL(t, EConvertLocal); } t = iLocalTime; TRAP(rulesErrLocal, rules->ConvertToUtcL(t)); if(rulesErrLocal == KErrNone) { rulesErrLocal = CompareTimesL(t, EConvertLocal); } } if(converterErrUTC != KErrNone) err = converterErrUTC; if(converterErrLocal != KErrNone) err = converterErrLocal; if(rulesErrUTC != KErrNone) err = rulesErrUTC; if(rulesErrLocal != KErrNone) err = rulesErrLocal; } CleanupStack::PopAndDestroy(rules); CleanupStack::PopAndDestroy(converter); return err; }