void R_ProcessEvents(void) { while (peekevent()) doevent(); if (cpuLimit > 0.0 || elapsedLimit > 0.0) { double cpu, data[5]; R_getProcTime(data); cpu = data[0] + data[1]; /* children? */ if (elapsedLimit > 0.0 && data[2] > elapsedLimit) { cpuLimit = elapsedLimit = -1; if (elapsedLimit2 > 0.0 && data[2] > elapsedLimit2) { elapsedLimit2 = -1.0; error(_("reached session elapsed time limit")); } else error(_("reached elapsed time limit")); } if (cpuLimit > 0.0 && cpu > cpuLimit) { cpuLimit = elapsedLimit = -1; if (cpuLimit2 > 0.0 && cpu > cpuLimit2) { cpuLimit2 = -1.0; error(_("reached session CPU time limit")); } else error(_("reached CPU time limit")); } } if (UserBreak) { UserBreak = FALSE; onintr(); } R_CallBackHook(); if(R_Tcl_do) R_Tcl_do(); }
SEXP attribute_hidden do_setSessionTimeLimit(SEXP call, SEXP op, SEXP args, SEXP rho) { double cpu, elapsed, data[5]; checkArity(op, args); cpu = asReal(CAR(args)); elapsed = asReal(CADR(args)); R_getProcTime(data); if (R_FINITE(cpu) && cpu > 0) #ifdef Win32 cpuLimit2 = cpu + data[0] + data[1]; #else cpuLimit2 = cpu + data[0] + data[1] + data[3] + data[4]; #endif else cpuLimit2 = -1;
void attribute_hidden resetTimeLimits() { double data[5]; R_getProcTime(data); elapsedLimit = (elapsedLimitValue > 0) ? data[2] + elapsedLimitValue : -1.0; if (elapsedLimit2 > 0.0 && (elapsedLimit <= 0.0 || elapsedLimit2 < elapsedLimit)) elapsedLimit = elapsedLimit2; #ifdef Win32 cpuLimit = (cpuLimitValue > 0) ? data[0] + data[1] + cpuLimitValue : -1.0; #else cpuLimit = (cpuLimitValue > 0) ? data[0] + data[1] + data[3] + data[4] + cpuLimitValue : -1.0; #endif if (cpuLimit2 > 0.0 && (cpuLimit <= 0.0 || cpuLimit2 < cpuLimit)) cpuLimit = cpuLimit2; }
SEXP attribute_hidden do_proctime(SEXP call, SEXP op, SEXP args, SEXP env) { SEXP ans, nm; checkArity(op, args); PROTECT(ans = allocVector(REALSXP, 5)); PROTECT(nm = allocVector(STRSXP, 5)); R_getProcTime(REAL(ans)); SET_STRING_ELT(nm, 0, mkChar("user.self")); SET_STRING_ELT(nm, 1, mkChar("sys.self")); SET_STRING_ELT(nm, 2, mkChar("elapsed")); SET_STRING_ELT(nm, 3, mkChar("user.child")); SET_STRING_ELT(nm, 4, mkChar("sys.child")); setAttrib(ans, R_NamesSymbol, nm); setAttrib(ans, R_ClassSymbol, mkString("proc_time")); UNPROTECT(2); return ans; }
SEXP do_proctime(SEXP call, SEXP op, SEXP args, SEXP env) { SEXP ans = allocVector(REALSXP, 5); R_getProcTime(REAL(ans)); return ans; }