Даталар жана убакыт менен иштөө: chrono китепканасы
Өлчөө жана пландоо үчүн тип жактан коопсуз узактыктар, сааттар жана убакыт учурлары
int анын 500 секундбу, миллисекундбу же наносекундбу экенин айтпайт, ал эми бул бирдиктерди аралаштыруу - байкалбас каталардын классикалык булагы. <chrono> китепканасы өлчөө бирдигин типтин өзүнө камтыйт. std::chrono::milliseconds тиби std::chrono::seconds тибинен айырмаланат, ошондуктан компилятор аларды өзү айландырат жана тактыкты тымызын жоготуучу айландырууларды четке кагат.
- үч негизги абстракцияны түшүндүрүү: узактыктар, сааттар жана убакыт учурлары,
- өткөн убакытты өлчөө үчүн жана календардык датаны окуу үчүн туура саатты тандоо,
duration_castменен бирдиктерди коопсуз айландыруу жана качан кыркуу болорун түшүнүү,- өз кодуңузду өлчөп, кичинекей секундомер жана тескери саноо куруу.
1. Убакытты өлчөө эмне үчүн алдамчылык менен татаал
<chrono>ге чейин кодду time() же clock() сыяктуу C функциялары менен өлчөп, натыйжаны жылаңач longго сакташчу. Мындай ыкманын үч тузагы бар:
- Бирдиктердин чаташуусу:
1500сыяктуу санда тиркелген бирдик жок. Аны кайтарган функция секунд берип жатабы же миллисекундбу? Тип муну билдирбейт, ошондуктан туура эмес божомол оңой эле компиляцияланат жана 1000 эсе жаңылышкан ката берет. - Туура эмес сааттар: күнүмдүк "дубал" сааты (компьютердин календардык убактысы) секирип кетиши мүмкүн. Машина убакыт серверине синхрондошкондо, же колдонуучу датаны өзгөрткөндө, же жайкы убакытка өтүү болгондо, дубал сааты артка жылышы мүмкүн. Эгер аны менен тапшырманы өлчөсөңүз, терс же акылга сыйбас узактык аласыз.
- Тымызын толуп кетүү жана тактыктын жоголушу: секунддарды миллиардга көбөйтүп наносекундга айландыруу 32 биттик бүтүндү толтуруп жибериши мүмкүн, ал эми артка бөлүү бөлчөк бөлүгүн эскертүүсүз ыргытат.
<chrono> үч көйгөйдү тең убакытка бай тип системасын берип чечет. Бирдик типте жашайт, тактыкты жоготуучу айландырууларды ачык көрсөтүү керек, ал эми ар бир саат - документтелген кепилдиктери бар өзүнчө тип. Муну убакытка колдонулган RAII жана const-туруктуулук мамилеси катары кабылдаңыз: болбосо эсиңизде кармашыңыз керек болгон нерсени компилятор көзөмөлдөсүн.