差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
次のリビジョン
前のリビジョン
softwares:nestdaq:cplusplus [2024/02/02 16:07] – [std::chrono ライブラリ] kobayashsoftwares:nestdaq:cplusplus [2024/02/02 16:19] (現在) – [std::chrono ライブラリ] kobayash
行 36: 行 36:
   * 参考: Stack Overflow -- Different behaviour of system_clock on windows and linux https://stackoverflow.com/questions/55120594/different-behaviour-of-system-clock-on-windows-and-linux   * 参考: Stack Overflow -- Different behaviour of system_clock on windows and linux https://stackoverflow.com/questions/55120594/different-behaviour-of-system-clock-on-windows-and-linux
 === std::chrono ライブラリクロックの違い === === std::chrono ライブラリクロックの違い ===
-  * 以下のようなコードを書く +  * 以下のようなコードを書く<code> 
-  * システムの時計をずせるように、network の時刻同期を切る。<code>+#include <iostream> 
 +#include <thread> 
 +#include <chrono> 
 + 
 +int main(int argc,char *argv[]){ 
 +  std::chrono::system_clock::time_point          system_clock_start = std::chrono::system_clock::now(); 
 +  std::chrono::steady_clock::time_point          steady_clock_start = std::chrono::steady_clock::now(); 
 +  std::chrono::high_resolution_clock::time_point h_reso_clock_start = std::chrono::high_resolution_clock::now(); 
 +  std::chrono::nanoseconds system_clock_start_epoch = std::chrono::duration_cast<std::chrono::nanoseconds> (system_clock_start.time_since_epoch()); 
 +  std::chrono::nanoseconds steady_clock_start_epoch = std::chrono::duration_cast<std::chrono::nanoseconds> (steady_clock_start.time_since_epoch()); 
 +  std::chrono::nanoseconds h_reso_clock_start_epoch = std::chrono::duration_cast<std::chrono::nanoseconds> (h_reso_clock_start.time_since_epoch()); 
 + 
 +  for (int i = 0; i < 100; i++) { 
 +    std::chrono::system_clock::time_point          system_clock_now = std::chrono::system_clock::now(); 
 +    std::chrono::steady_clock::time_point          steady_clock_now = std::chrono::steady_clock::now(); 
 +    std::chrono::high_resolution_clock::time_point h_reso_clock_now = std::chrono::high_resolution_clock::now(); 
 +    std::chrono::nanoseconds system_clock_now_epoch = std::chrono::duration_cast<std::chrono::nanoseconds> (system_clock_now.time_since_epoch()); 
 +    std::chrono::nanoseconds steady_clock_now_epoch = std::chrono::duration_cast<std::chrono::nanoseconds> (steady_clock_now.time_since_epoch()); 
 +    std::chrono::nanoseconds h_reso_clock_now_epoch = std::chrono::duration_cast<std::chrono::nanoseconds> (h_reso_clock_now.time_since_epoch()); 
 +    std::chrono::nanoseconds system_clock_duration  = std::chrono::duration_cast<std::chrono::nanoseconds> (system_clock_now - system_clock_start); 
 +    std::chrono::nanoseconds steady_clock_duration  = std::chrono::duration_cast<std::chrono::nanoseconds> (steady_clock_now - steady_clock_start); 
 +    std::chrono::nanoseconds h_reso_clock_duration  = std::chrono::duration_cast<std::chrono::nanoseconds> (h_reso_clock_now - h_reso_clock_start); 
 +     
 + 
 +    std::time_t now = std::chrono::system_clock::to_time_t(system_clock_now); 
 +    std::string s(30, '\0'); 
 +    std::strftime(&s[0], s.size(), "%Y-%m-%d %H:%M:%S", std::localtime(&now)); 
 + 
 +    std::cout << "system_clock_now: " << s << std::endl; 
 +    std::cout << "system_clock_now_epoch.count(): " << system_clock_now_epoch.count() << std::endl; 
 +    std::cout << "steady_clock_now_epoch.count(): " << steady_clock_now_epoch.count() << std::endl; 
 +    std::cout << "h_reso_clock_now_epoch.count(): " << h_reso_clock_now_epoch.count() << std::endl; 
 +    std::cout << "system_clock_duration.count(): << system_clock_duration.count() << std::endl; 
 +    std::cout << "steady_clock_duration.count(): << steady_clock_duration.count() << std::endl; 
 +    std::cout << "h_reso_clock_duration.count(): << h_reso_clock_duration.count() << std::endl; 
 +    std::cout << std::endl; 
 + 
 +    std::this_thread::sleep_for(std::chrono::seconds(1)); 
 +  } 
 +  return 0; 
 +
 +</code> 
 +  * macOS 12.3.1 でシステムの時計をずせるように、network の時刻同期を切る。<code>
 $ sudo systemsetup -setusingnetworktime off $ sudo systemsetup -setusingnetworktime off
 2024-02-02 15:09:51.126 systemsetup[23124:12338196] ### Error:-99 File:/AppleInternal/Library/BuildRoots/66382bca-8bca-11ec-aade-6613bcf0e2ee/Library/Caches/com.apple.xbs/Sources/Admin/InternetServices.m Line:379 2024-02-02 15:09:51.126 systemsetup[23124:12338196] ### Error:-99 File:/AppleInternal/Library/BuildRoots/66382bca-8bca-11ec-aade-6613bcf0e2ee/Library/Caches/com.apple.xbs/Sources/Admin/InternetServices.m Line:379
 setUsingNetworkTime: Off setUsingNetworkTime: Off
 </code> </code>
-  * コードを実行する。<code>$ ./std_chrono_comp_clocks +  * macOS 12.3.1 上でコードを実行する。<code>$ ./std_chrono_comp_clocks 
 system_clock_now: 2024-02-02 15:56:02 system_clock_now: 2024-02-02 15:56:02
 system_clock_now_epoch.count(): 1706856962044809000 system_clock_now_epoch.count(): 1706856962044809000
行 96: 行 138:
 steady_clock_duration.count(): 5021508219 steady_clock_duration.count(): 5021508219
 h_reso_clock_duration.count(): 5021508221 h_reso_clock_duration.count(): 5021508221
-</code>+</code> これをみると、std::chrono::high_resolution_clock は std::chrono::steady_clock の別名のようだ。また、Ubuntu MATE 22.03.3 LTS で実行すると、以下のようになる。<code> 
 +$ ./std_chrono_comp_clocks  
 +system_clock_now: 2024-02-02 16:18:15 
 +system_clock_now_epoch.count(): 1706858295484039608 
 +steady_clock_now_epoch.count(): 1109260620490710 
 +h_reso_clock_now_epoch.count(): 1706858295484039845 
 +system_clock_duration.count(): 1217 
 +steady_clock_duration.count(): 958 
 +h_reso_clock_duration.count(): 945 
 + 
 +system_clock_now: 2024-02-02 16:18:16 
 +system_clock_now_epoch.count(): 1706858296484348873 
 +steady_clock_now_epoch.count(): 1109261620800102 
 +h_reso_clock_now_epoch.count(): 1706858296484349263 
 +system_clock_duration.count(): 1000310482 
 +steady_clock_duration.count(): 1000310350 
 +h_reso_clock_duration.count(): 1000310363 
 + 
 +system_clock_now: 2024-02-02 16:18:17 
 +system_clock_now_epoch.count(): 1706858297484600085 
 +steady_clock_now_epoch.count(): 1109262621051266 
 +h_reso_clock_now_epoch.count(): 1706858297484600429 
 +system_clock_duration.count(): 2000561694 
 +steady_clock_duration.count(): 2000561514 
 +h_reso_clock_duration.count(): 2000561529 
 +... 
 +</code> これを見ると、std::chrono::high_resolution_clock は std::chrono::system_clock の別名のようだ。 
  
 ==== Arrow operator (->) in the function declaration ==== ==== Arrow operator (->) in the function declaration ====
softwares/nestdaq/cplusplus.1706857640.txt.gz · 最終更新: 2024/02/02 16:07 by kobayash
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0