Me estoy preparando para escribir un núcleo de jueces en línea,
Un programa que puede compilar el código del usuario y ejecutar el programa para verificar la respuesta como uva juez en línea.¿Puedo usar SetErrorMode en el proceso de C#?
Y estoy teniendo problemas para detectar la excepción de enviar programa como a continuación.
int main()
{
while(~scanf("%d %d",n,&m))
{
printf("%d\n",n+m);
}
return 0;
}
es acceso denegado en la primera línea porque escanea un número entero a la posición de error.
¿cómo puedo detectar el error de tiempo de ejecución para mi proceso?
Solía utilizar "try catch" para capturar la excepción,
pero no respondió nada sobre el error de tiempo de ejecución.
por lo que sólo marque el código de salida del programa de someter a pesar de que no es un buen método para comprobar excepción de un proceso ..
y se nota como photo
tengo que cerrar el cuadro de mensaje de error de forma manual,
y encuentro una solución que es usar una DLL SEH Handler para el proceso.
SetErrorMode(SEM_NOGPFAULTERRORBOX);
pero no sé cómo usarlo en el proceso C#.
y por debajo es mi código de juzgador
timer = new Stopwatch();
timer.Reset();
submitProg = new Process();
submitProg.StartInfo.FileName = outputFile;
submitProg.StartInfo.UseShellExecute = false;
submitProg.StartInfo.CreateNoWindow = true;
submitProg.StartInfo.RedirectStandardInput = true;
submitProg.StartInfo.RedirectStandardOutput = true;
submitProg.StartInfo.RedirectStandardError = true;
submitProg.StartInfo.ErrorDialog = false;
submitProg.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
submitProg.EnableRaisingEvents = true;
submitProg.Start();
timer.Start();
progInput = submitProg.StandardInput;
progOutput = submitProg.StandardOutput;
progInput.Write(inputStream.ReadToEnd());
submitProg.StandardInput.Close();
while (!submitProg.HasExited)
{
peakPagedMem = submitProg.PeakPagedMemorySize64;
peakVirtualMem = submitProg.PeakVirtualMemorySize64;
peakWorkingSet = submitProg.PeakWorkingSet64;
if (peakPagedMem > memLimit)
{
submitProg.Kill();
}
if (timer.ElapsedMilliseconds > timeLimit)
{
timeLimitExceed = true;
submitProg.Kill();
}
}
timeUsed = timer.ElapsedMilliseconds;
timer.Stop();
if(submitProg.ExitCode!=0)systemRuntimeError = true;
Gracias por ayudar, y así lo siento por mi mala Inglés.
===============================
p.s.
la pregunta es cómo puedo configurar el modo de error para el proceso secundario en C#.
Mi inglés no es lo suficientemente bueno para explicar el problema, lo siento mucho. < (_ _)>
Tener unos pocos cuadros de error no debería ser un problema, ya que en cualquier caso, tiene que guardarlo bastante bien.Puedes matar el arenero y el proceso con él. –