关于Online Judge System的编译延时的一种解决方案
2010-12-08 01:55
260 查看
在OJ里,编译是评测的第一步。
通常情况下,大家都是用bat文件加命令行进行编译的。但这里不好控制时间。如果用一个线程去监控这个编译进程,进程结束就下一步的话,未免有点小题大做了。
我采用的是下面一种“文件锁”的方法:
在创建bat文件的同时创建一个“文件锁”文件,如”.lock”。
然后在bat文件的最后一行加入一句”del .lock”即可。而在程序中你只要在运行bat之后来一句
while(0 == access(“.lock”, 0));
这样就可以做到延时了。等到文件锁被删除之后,就表示文件编译完成。
当然,有可能编译时间过久,那这里也可以从while下文章,加一个条件,如果时间到了,则删掉这个进程即可。
下面是部分的实现代码:
Code:
/** 这段代码就是生成bat文件的代码 */
bool NCompiler::MakeBat(const char *cmd)
{
FILE *fp;
FILE *lock; ///< 编译锁文件
if(NULL == (fp = fopen(BAT_FILENAME, "w+")) ||
NULL == (lock = fopen(LOCK_FILENAME, "w+")))
{
fclose(fp);
fclose(lock);
return false;
}
/** 输出编译命令 */
fprintf(fp, "%s", cmd);
/** 测试编译锁时的延时指令 */
//fprintf(fp, "ping 127.0.0.1/n");
/** 输出删除编译锁命令 */
fprintf(fp, "del %s/n", LOCK_FILENAME);
fclose(fp);
fclose(lock);
return true;
}
通常情况下,大家都是用bat文件加命令行进行编译的。但这里不好控制时间。如果用一个线程去监控这个编译进程,进程结束就下一步的话,未免有点小题大做了。
我采用的是下面一种“文件锁”的方法:
在创建bat文件的同时创建一个“文件锁”文件,如”.lock”。
然后在bat文件的最后一行加入一句”del .lock”即可。而在程序中你只要在运行bat之后来一句
while(0 == access(“.lock”, 0));
这样就可以做到延时了。等到文件锁被删除之后,就表示文件编译完成。
当然,有可能编译时间过久,那这里也可以从while下文章,加一个条件,如果时间到了,则删掉这个进程即可。
下面是部分的实现代码:
Code:
/** 这段代码就是生成bat文件的代码 */
bool NCompiler::MakeBat(const char *cmd)
{
FILE *fp;
FILE *lock; ///< 编译锁文件
if(NULL == (fp = fopen(BAT_FILENAME, "w+")) ||
NULL == (lock = fopen(LOCK_FILENAME, "w+")))
{
fclose(fp);
fclose(lock);
return false;
}
/** 输出编译命令 */
fprintf(fp, "%s", cmd);
/** 测试编译锁时的延时指令 */
//fprintf(fp, "ping 127.0.0.1/n");
/** 输出删除编译锁命令 */
fprintf(fp, "del %s/n", LOCK_FILENAME);
fclose(fp);
fclose(lock);
return true;
}
相关文章推荐
- 关于Android的SystemProperties的 set和get可能存在延时的分析
- Online Judge System For SzNOI 题库 语法百题 C++ d015
- Online Judge system For SzNOI 题库 语法百题 c++ d038
- 关于在Win7 SP1操作系统下编译的ADO应用程序不能在比Win7 SP1版本低的操作系统上运行,微软给出的解释和解决方案
- 找不到编译动态表达式所需的一种或多种类型。是否缺少对 Microsoft.CSharp.dll 和 System.Core.dll 的引用?
- 【Qt5 for VS】关于 VS2013+qt5.4.0 QSerialPort 编译时提示找不到外部符号,连接出错的解决方案【转载】
- Online Judge System For SzNOI 题库 语法百题 C++ d009
- Online Judge System For SzNOI 题库 语法百题 C++ d016
- Online Judge System For SzNOI 题库 语法百题 C++ d002
- Online Judge System For SzNOI 题库 语法百题 C++ d004
- Online Judge System For SzNOI 题库 语法百题 C++ d017
- Online Judge System For SzNOI 题库 语法百题 c++ d024
- 关于win8下pip安装mysql找不到config-win.h文件的一种解决方案
- Online Judge System For SzNOI 题库 语法百题 c++ d039
- 关于MVC4项目从32位机移到64位机编译报错解决方案
- 关于AndroidStudio中(有关详细信息, 请使用 -Xlint:deprecation 重新编译)的错误解决方案!
- 关于IE7 IE8兼容HTML5和CSS3的一种解决方案 (转)
- Online Judge System For SzNOI 题库 语法百题 c++ d018
- 关于IE7 IE8兼容HTML5和CSS3的一种解决方案
- Online Judge System For SzNOI 题库 语法百题 c++ d040