IBM AIX平台使用std::clock()计时相关问题咨询
std::clock() Behavior on IBM AIX Hey there, let's break down what's going on with std::clock() in your AIX scenario first—plus fix a tiny syntax quirk in your code (that extra closing parenthesis at the end of your printf line will cause a compile error, fyi).
The Core Issue: std::clock() Tracks CPU Time, Not Wall-Clock Time
Here's the key thing to wrap your head around: std::clock() doesn't measure the actual real-world time that passes (the kind you'd check on a wall clock). Instead, it counts the total CPU time your process has consumed since launch.
When you call boost::this_thread::sleep_for(boost::chrono::seconds(5)), your thread is completely idle—it doesn't use any CPU cycles during those 5 seconds. That means clock() won't increment at all during the sleep, so your timedif value will be way smaller than 5 seconds (probably close to 0, aside from the tiny bit of CPU used by your printf and initial clock calls).
AIX-Specific Context
On IBM AIX, this behavior is strictly enforced. The clock() function here aggregates both user-mode and kernel-mode CPU time used by your process, but it explicitly excludes any idle time (like sleep, waiting for I/O, or paused threads). This lines up with the C++ standard definition of std::clock(), but it's super easy to mix up with functions that track real elapsed time.
How to Measure Actual Elapsed Time
If you want to track the real wall-clock time that passes (including sleep periods), switch to std::chrono::system_clock (or the Boost equivalent, since you're already using Boost):
#include <stdio.h> #include <boost/thread.hpp> #include <boost/chrono.hpp> int main(void) { printf("start\n"); // Capture wall-clock start time auto start = boost::chrono::system_clock::now(); boost::this_thread::sleep_for(boost::chrono::seconds(5)); // Calculate elapsed real time auto end = boost::chrono::system_clock::now(); boost::chrono::duration<double> elapsed = end - start; printf("The elapsed wall-clock time is %lf seconds\n", elapsed.count()); return 0; }
This code will correctly report an elapsed time very close to 5 seconds, even during the sleep, because system_clock tracks the actual time passing in the system.
Quick Recap
std::clock()= CPU time your process has used (ignores sleep/idle time)system_clock= real wall-clock time (includes all elapsed time, even when idle)- On AIX, this distinction is non-negotiable, which is why your original code didn't measure the sleep duration as expected.
内容的提问来源于stack exchange,提问作者Iron

