我正在编写一个程序来检查提交代码是否正确。 这是我的一些代码...
Process submitProg;
StreamWriter progInput;
string input;//it will be submitProg's standard input
//initialization
//...
submitProg.Start();
progInput = submitProg.StandardInput;
progInput.Write("{0}",input);
progInput.Close();
progInput.Dispose();
while(!submitProg.HasExited)
if(timeOUT)
submitProg.Kill();
令人惊讶的是,当输入足够大且提交程序没有读取任何内容时,它会卡在progInput.Write("{0}",input);
行。
某些提交代码可能会像while(1);
无所事事那样棘手。当输入文件足够小时,我可以终止进程。相反,如果输入文件较大,程序将不会检查超时并在读取输入时卡住。
我是否有任何解决方案可以避免陷入无法读取任何内容的代码中。 感谢。
答案 0 :(得分:0)
您将受标准输入缓冲区大小和您正在测试的程序的支配。如果它没有读取其缓冲区,则对标准输入的写入可以阻止。
避免该问题的一种方法是在不同的线程上写入标准输入流,例如ThreadPool线程。只需将Write,Close,Dispose行放在ThreadPool任务中,然后使用ThreadPool.QueueUserWorkItem。
作为旁注,您可能不需要调用progInput.Close和ProgInput.Dispose。 Dispose调用应该没问题。