在 OJ 里,编译是评测的第一步。通常情况下,大家都是用 bat 文件加命令行进行编译的。但这里不好控制时间。如果用一个线程去监控这个编译进程,进程结束就下一步的话,未免有点小题大做了。我采用的是下面一种“文件锁”的方法:在创建 bat 文件的同时创建一个“文件锁”文件,如.lock。然后在 bat 文件的最后一行加入一句del .lock即可。而在程序中你只要在运行 bat 之后来一句while(0==access(“.lock”,0));这样就可以做到延时了。等到文件锁被删除之后,就表示文件编译完成。当然,有可能编译时间过久,那这里也可以从while下文章,加一个条件,如果时间到了,则删掉这个进程即可。下面是部分的实现代码:/** 这段代码就是生成bat文件的代码 */boolNCompiler::MakeBat(constchar*cmd){FILE *fp;FILE *lock;///< 编译锁文件if(NULL== (fp =fopen(BAT_FILENAME,"w+")) ||NULL== (lock =fopen(LOCK_FILENAME,"w+"))){fclose(fp);fclose(lock);returnfalse;}/** 输出编译命令 */fprintf(fp,"%s", cmd);/** 测试编译锁时的延时指令 *//
...
继续阅读
(52)