起初觉得OJ的内核就是那么简单的一个东西,做起来还是问题多多,也不清楚我的方法对不对。。
首先是创建两个管道,分别把标准输入输出重定向到这两个管道上,接着创建子进程,也就是要测试的程序,由于创建管道时设置了 saAttr.bInheritHandle=TRUE, 于是子进程的标准输入输出自然地也被定向到管道上,创建完毕后将主进程的输入输出还原
接下来我分别开了读,写线程,用于读取文件中的测试数据,最开始是直接用主进程来读,后来发现有海量数据的时候不好办,就另开了线程,
这样可以边读边处理
接下来在循环里用WaitForSingleObject来判断子进程的运行状态,每个循环都测试已经运行的时间和消耗的内存,一超出限制便结束子进程
目前在耗时测试上感觉还不对劲,测出来的耗时不稳定,代码如下
然后要做的就是开裁判线程来对比结果了。。。
做这些东西就是无聊,没有写游戏来得有意思啊。。。。我决定一定不干满足用户需求这种痛苦的编程工作,把无限的想象和可能都扼杀了