std::chrono is used in C to process time, including obtaining the current time, measuring execution time, operation time point and duration, and formatting analysis time. 1. Use std::chrono::system_clock::now() to obtain the current time, which can be converted into a readable string, but the system clock may not be monotonous; 2. Use std::chrono::steady_clock to measure the execution time to ensure monotonicity, and convert it into milliseconds, seconds and other units through duration_cast; 3. Time point (time_point) and duration (duration) can operate interoperably, but pay attention to the differences in unit compatibility and clock epoch; 4. C 20 supports time formatting and parsing, and needs to use std::format and std::parse, relying on the compiler's support for C 20.
Using std::chrono
in C can be really useful once you get the hang of it. It's part of the standard library and give you solid tools for handling time — whether that's measuring durations, working with timestamps, or dealing with time zones in C 20 and beyond.

Getting the current time
To grab the current point in time, you usually go with std::chrono::system_clock::now()
. That gives you a time_point
representing right now.
auto now = std::chrono::system_clock::now();
This is often used when you want to measure how long something takes or just log a timestamp. If you need to convert it to something readable like a string, you'll typically convert it to time_t
and use ctime
or similar:

std::time_t now_c = std::chrono::system_clock::to_time_t(now); std::cout << "Current time: " << std::ctime(&now_c);
Keep in mind that system_clock might not be monotonic — if someone changes the system time, it could jump forward or backward. For timing purposes, read on.
Measuring execution time accurately
When you want to measure how long a piece of code runs, steady_clock
is your friend. It's monotonic (won't go backwards), which makes it safe for timing.

Here's a common pattern:
auto start = std::chrono::steady_clock::now(); // ... do some work ... auto end = std::chrono::steady_clock::now(); auto duration = end - start;
If you want to show this in millionseconds or seconds, you'll cast it using duration_cast
:
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>(duration).count(); std::cout << "Took " << ms << " ms\n";
You can also use microseconds
, nanoseconds
, or even seconds
. Just keep in mind that converting from higher precision (like nanoseconds) to lower (like seconds) will truncate unless you cast properly.
Working with time points and durations
- A time_point is a specific moment.
- A duration is a span of time (like 5 seconds).
They're separate types, but they work together. You can add a duration to a time_point to get a new time_point:
auto then = now std::chrono::hours(2);
This is handy when scheduling events or waiting until a certain time. Just make sure both sides of the operation are using compatible units — mixing hours and million seconds won't cause errors, but it might not do what you expect unless you explicitly convert.
Also, don't assume that all clocks start at zero — their epoch (starting point) varies:
-
system_clock
typically starts in 1970 (like Unix time). -
steady_clock
has an arbitrary epoch, so comparing its time_points across runs doesn't make sense.
Formatting and parsing time (C 20 )
With C 20, <chrono>
got better support for formatting dates and times directly:
auto now = std::chrono::system_clock::now(); std::cout << "Formatted: " << std::format("{:%Y-%m-%d %H:%M}", now) << "\n";
Parsing time strings also became possible:
std::istringstream ss("2024-03-15 12:30"); std::chrono::system_clock::time_point tp; ss >> std::parse("%Y-%m-%d %H:%M", tp);
This is super helpful when reading logs or config files with timestamps. But remember, these features require C 20 and good compiler support (like GCC 13 , Clang 15 , or MSVC with latest STL).
So yeah, std::chrono
is pretty powerful once you understand the basic types and when to use each clock. Not too hard, just a bit easy to mix up at first.
The above is the detailed content of Using std::chrono in C. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

The steps to install PHP8 on Ubuntu are: 1. Update the software package list; 2. Install PHP8 and basic components; 3. Check the version to confirm that the installation is successful; 4. Install additional modules as needed. Windows users can download and decompress the ZIP package, then modify the configuration file, enable extensions, and add the path to environment variables. macOS users recommend using Homebrew to install, and perform steps such as adding tap, installing PHP8, setting the default version and verifying the version. Although the installation methods are different under different systems, the process is clear, so you can choose the right method according to the purpose.

How to start writing your first PHP script? First, set up the local development environment, install XAMPP/MAMP/LAMP, and use a text editor to understand the server's running principle. Secondly, create a file called hello.php, enter the basic code and run the test. Third, learn to use PHP and HTML to achieve dynamic content output. Finally, pay attention to common errors such as missing semicolons, citation issues, and file extension errors, and enable error reports for debugging.

PHPisaserver-sidescriptinglanguageusedforwebdevelopment,especiallyfordynamicwebsitesandCMSplatformslikeWordPress.Itrunsontheserver,processesdata,interactswithdatabases,andsendsHTMLtobrowsers.Commonusesincludeuserauthentication,e-commerceplatforms,for

TohandlefileoperationsinPHP,useappropriatefunctionsandmodes.1.Toreadafile,usefile_get_contents()forsmallfilesorfgets()inaloopforline-by-lineprocessing.2.Towritetoafile,usefile_put_contents()forsimplewritesorappendingwiththeFILE_APPENDflag,orfwrite()w

The core goal of Java Security Manager configuration is to control code permissions, prevent overprivileged operations, and ensure normal function operation. The specific steps are as follows: 1. Modify the security.manager settings in the java.security file and use -Djava.security.policy to enable the security manager; 2. When writing the policy file, you should clarify the CodeBase and SignedBy properties, and accurately set the permissions such as FilePermission, SocketPermission, etc. to avoid security risks; 3. Common problems: If the class loading fails, you need to add defineClass permission, and the reflection is restricted, you need to reflect.

Semaphore is used to control the number of concurrent accesses, suitable for resource pool management and flow-limiting scenarios, and control permissions through acquire and release; CountDownLatch is used to wait for multiple thread operations to complete, suitable for the main thread to coordinate child thread tasks. 1. Semaphore initializes the specified number of licenses, supports fair and non-fair modes, and when used, the release should be placed in the finally block to avoid deadlock; 2. CountDownLatch initializes the count, call countDown to reduce the count, await blocks until the count returns to zero, and cannot be reset; 3. Select according to the requirements: use Semaphore to limit concurrency, wait for all completions to use CountDown

In team collaboration development, choosing the right PHP annotation style can improve code readability, maintenance efficiency and communication costs. 1. Use single-line comments (// or #) to suit short descriptions, which are used to explain the meaning of variables or temporary notes. It is recommended to use local explanations and quick debugging inside the function. 2. Multi-line comments (//) are suitable for blocking large pieces of code or writing detailed logical descriptions. They can be used to close code blocks or comment deprecated functions during debugging, but be careful not to use them in nest. 3. Document comments (/*/) are standard for team collaboration, and support IDE prompts and automatic document generation, which are suitable for key information descriptions such as function usage and parameter types. In addition, the team should unify the annotation style and keep it updated to avoid mixing formats or ignoring modified synchronization. The annotation should focus on complex logic.

The yield keyword is used to create generators, generate values on demand, and save memory. 1. Replace return to generate finite sequences, such as Fibonacci sequences; 2. Implement infinite sequences, such as natural sequences; 3. Process big data or file readings, and process them line by line to avoid memory overflow; 4. Note that the generator can only traverse once, and can be called by next() or for loop.
