导航:首页 > 源码编译 > 代码编译超时

代码编译超时

发布时间:2025-02-21 15:29:32

Ⅰ “绝大多数代码是WA,少数代码是CE,TLE和RE”,请问WA,CE,RE,都是什么意思啊

Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序多种程序(如C、C++)源代码,系统对源代码进行编译和执行。
通过(Accepted,AC)、答案错误(Wrong Answer,WA)、超时(Time Limit Exceed,TLE)、超过输出限制(Output Limit Exceed,OLE)、超内存(Memory Limit Exceed,MLE)、运行时错误(Runtime Error,RE)、格式错误(Presentation Error,PE)、无法编译(Compile Error,CE)

Ⅱ 如何在android下采用相对时间,实现超时等待的功能

一、函数功能说明

pthread_cond_timedwait 等待一个条件变量,或者超时就会返回

POSIX有两种时钟类型

1、CLOCK_REALTIME: 系统范围内的实时时钟,是个软件时钟,可以通过命令等方式修改该系统时间.
2、CLOCK_MONOTONIC:系统起机时到现在的时间,不能被设置和修改.

pthread_cond_timedwait()在没有设置条件变量属性的时候,默认用的是CLOCK_REALTIME软件时间,
因此在极端情况下会出现实际等待的时间与设置的超时时间不同。
所以,对于linux的超时等待功能,最好是使用CLOCK_MONOTONIC进行实现,并且通过pthread_condattr_setclock实现。

而对于android系统而言,是不支持pthread_condattr_setclock,通过验证可以采用函数pthread_cond_timedwait_monotonic实现。

下面直接给出代码的实现功能。

二、超时等待功能

[cpp] view plain
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <sys/time.h>
#include <sys/times.h>
#include <unistd.h>
#include <time.h>

static pthread_mutex_t s_mut = PTHREAD_MUTEX_INITIALIZER;
static pthread_cond_t s_cond = PTHREAD_COND_INITIALIZER;

void PthreadAttr_Init(void);
unsigned long long getSysTime(void);
void waitTimeout(void);

void PthreadAttr_Init(void)
{
#if defined(ANDROID)

#else
pthread_condattr_t cattr;
int iRet = -1;
iRet = pthread_condattr_init(&cattr);
if (iRet != 0)
{
return;
}
pthread_mutex_init(&s_mut, NULL);
pthread_condattr_setclock(&cattr, CLOCK_MONOTONIC);
pthread_cond_init(&s_cond, &cattr);
pthread_condattr_destroy(&cattr);
#endif
return;
}

void waitTimeout(void)
{
unsigned long long ullbefore = getSysTime();
unsigned long long ullafter = 0;

#if defined(ANDROID)

#if defined(HAVE_PTHREAD_COND_TIMEDWAIT_MONOTONIC) // 支持ANDROID下NDK的编译,采用相对时间
struct timespec outtime;
memset(&outtime, 0x00, sizeof(struct timespec ));
clock_gettime(CLOCK_MONOTONIC, &outtime);
outtime.tv_sec += 2;
pthread_mutex_lock(&s_mut);
pthread_cond_timedwait_monotonic(&s_cond,&s_mut, &outtime);
pthread_mutex_unlock(&s_mut);
ullafter = getSysTime();
printf("####01 interval[%lld] ms\n", ullafter - ullbefore);
#else //支持ANDROID下NDK的编译,采用绝对时间
struct timeval now;
struct itmespec outtime;
gettimeofday(&now, NULL);
outtime.tv_sec = now..tv_sec + 3;
outtime.tv_nsec = now.tv_usec * 1000;
pthread_mutex_lock(&s_mut);
pthread_cond_timedwait(&s_cond, &s_mut, &outtime);
pthread_mutex_unlock(&s_mut);
ullafter = getSysTime();
printf("####02 interval[%lld] ms\n", ullafter - ullbefore);
#endif

#else // 支持LINUX下的编译,采用绝对时间
struct timespec outtime;
memset(&outtime, 0x00, sizeof(struct timespec ));
clock_gettime(CLOCK_MONOTONIC, &outtime);
outtime.tv_sec += 4;
pthread_mutex_lock(&s_mut);
pthread_cond_timedwait(&s_cond, &s_mut, &outtime);
pthread_mutex_unlock(&s_mut);
ullafter = getSysTime();
printf("####03 interval[%lld] ms\n", ullafter - ullbefore);
#endif
return;
}

unsigned long long getSysTime(void)
{
unsigned long long milliseconds = 0;

struct tms t_tmsTime;
clock_t t_CurTime;
static int s_clks_per_sec = 0;

if (s_clks_per_sec == 0)
{
s_clks_per_sec = sysconf(_SC_CLK_TCK);
}

if (s_clks_per_sec == 0)
{
return 0;
}

t_CurTime = times(&t_tmsTime);

if (1000 % s_clks_per_sec == 0)
{
milliseconds = (1000 /s_clks_per_sec)*(unsigned long long )t_CurTime;//换算成毫秒
}
else
{
milliseconds = 1000 * (unsigned long long )t_CurTime/s_clks_per_sec;//换算成毫秒
}

return milliseconds;
}

int main(void)
{
PthreadAttr_Init();
waitTimeout();
return 0;
}

编译命令:
gcc test_ptthrad_conf_timewait_monotonic.c -o test_ptthrad_conf_timewait_monotonic -lpthread -lrt

linux下的测试结果:
####03 interval[4010] ms

阅读全文

与代码编译超时相关的资料

热点内容
编译程序由哪些逻辑部分组成 浏览:969
唯品会app怎么样推给朋友有奖励吗 浏览:138
长时间不缓解压力会怎么样 浏览:973
广播怎么跟服务器和功放连接 浏览:872
51单片机有双串口的吗 浏览:596
普通程序员南京 浏览:925
双缸式压缩机 浏览:394
做好表格怎么放服务器 浏览:925
拆电极工资编程工资 浏览:997
ea21116发动机压缩比 浏览:29
加密后差错控制码 浏览:714
粒子群算法On 浏览:307
命令与征服3超级武器 浏览:847
编译1112 浏览:553
股票指标公式源码高级精准 浏览:980
小说管理系统项目源码 浏览:901
php注册判断 浏览:652
我的世界服务器名称和地址 浏览:145
将军不听元帅命令出关 浏览:136
linuxawk命令 浏览:986