aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLAN-TW <lantw44@gmail.com>2012-11-12 17:45:16 +0800
committerLAN-TW <lantw44@gmail.com>2012-11-12 17:45:16 +0800
commit4ffa3b525bcea52744de94bb0d8c9786cbd03d38 (patch)
tree12200435414f5fc92790de6e4fb7ff2d9935fcec
parentdd395f346b69a124608e22b64322c1f1d94e0df3 (diff)
downloadsctjudge-4ffa3b525bcea52744de94bb0d8c9786cbd03d38.tar.gz
sctjudge-4ffa3b525bcea52744de94bb0d8c9786cbd03d38.tar.zst
sctjudge-4ffa3b525bcea52744de94bb0d8c9786cbd03d38.zip
修正程序監視器可能發生除以 0 錯誤的問題
因為某些特殊狀況下,相鄰兩次取樣時 CPU 時間是相同的 (也許是發生在虛擬機反應遲 鈍時),因此在除之前要判斷是否為 0。
-rw-r--r--src/disptime.c17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/disptime.c b/src/disptime.c
index aaee942..9a5b422 100644
--- a/src/disptime.c
+++ b/src/disptime.c
@@ -103,12 +103,17 @@ void* sctjudge_dispaytime(void* arg){
}
if(!firstrun){
diffsyscpuall = syscpuall - presyscpuall;
- res_cpuuser = 1000 * (cpuuser - precpuuser) / diffsyscpuall;
- res_cpusystem = 1000 * (cpusystem - precpusystem) /
- diffsyscpuall;
- printf(" user%%: %2hd.%hd sys%%: %2hd.%hd",
- res_cpuuser / 10, res_cpuuser % 10,
- res_cpusystem / 10, res_cpusystem % 10);
+ if(diffsyscpuall){
+ res_cpuuser = 1000 * (cpuuser - precpuuser) /
+ diffsyscpuall;
+ res_cpusystem = 1000 * (cpusystem - precpusystem) /
+ diffsyscpuall;
+ printf(" user%%: %2hd.%hd sys%%: %2hd.%hd",
+ res_cpuuser / 10, res_cpuuser % 10,
+ res_cpusystem / 10, res_cpusystem % 10);
+ }else{
+ fputs(" user%: ? sys%: ? ", stdout);
+ }
}
precpuuser = cpuuser;
precpusystem = cpusystem;