diff options
author | LAN-TW <lantw44@gmail.com> | 2012-11-12 17:45:16 +0800 |
---|---|---|
committer | LAN-TW <lantw44@gmail.com> | 2012-11-12 17:45:16 +0800 |
commit | 4ffa3b525bcea52744de94bb0d8c9786cbd03d38 (patch) | |
tree | 12200435414f5fc92790de6e4fb7ff2d9935fcec | |
parent | dd395f346b69a124608e22b64322c1f1d94e0df3 (diff) | |
download | sctjudge-4ffa3b525bcea52744de94bb0d8c9786cbd03d38.tar.gz sctjudge-4ffa3b525bcea52744de94bb0d8c9786cbd03d38.tar.zst sctjudge-4ffa3b525bcea52744de94bb0d8c9786cbd03d38.zip |
修正程序監視器可能發生除以 0 錯誤的問題
因為某些特殊狀況下,相鄰兩次取樣時 CPU 時間是相同的 (也許是發生在虛擬機反應遲
鈍時),因此在除之前要判斷是否為 0。
-rw-r--r-- | src/disptime.c | 17 |
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; |