- #include <iostream> 
- #include <cstdbool> 
- #include <unistd.h> 
- #include <pthread.h> 
-   
- class Timer{ 
- private: 
-     bool run; 
-   
- public: 
-     void start(); 
-     void stop(); 
-     void print(); 
-   
- }; 
-   
- void Timer::start(){ 
-     this->run = true; 
-     this->print(); 
-     return; 
- } 
-   
- void Timer::stop(){ 
-     this->run = false; 
-     return; 
- } 
-   
- void Timer::print(){ 
-   
-     int counter = 0; 
-   
-     while(this->run == true){ 
-   
-         std::cout << counter << std::endl; 
-         counter++; 
-   
-         usleep(500000); 
-     } 
-   
-     return; 
- } 
-   
- void *handler(void *argument){ 
-   
-     ((Timer *) argument)->start(); 
-   
-     return argument; 
- } 
-   
- int main(void){ 
-   
-     Timer *timer = new Timer(); 
-     pthread_t timer_thread; 
-     int mainCounter = 0; 
-   
-     pthread_create(&timer_thread, NULL, handler, (void *) &timer); 
-   
-     while(true){ 
-   
-         if(mainCounter == 100){ 
-             std::cout << "Stopping..." << std::endl; 
-             timer->stop(); 
-         } 
-   
-         std::cout << " => " << mainCounter << std::endl; 
-         mainCounter++; 
-   
-         usleep(50000); 
-     } 
-   
-     return 0; 
- } 
-   
-   
				I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0ZGJvb2w+CiNpbmNsdWRlIDx1bmlzdGQuaD4KI2luY2x1ZGUgPHB0aHJlYWQuaD4KCmNsYXNzIFRpbWVyewpwcml2YXRlOgogICAgYm9vbCBydW47CgpwdWJsaWM6CiAgICB2b2lkIHN0YXJ0KCk7CiAgICB2b2lkIHN0b3AoKTsKICAgIHZvaWQgcHJpbnQoKTsKCn07Cgp2b2lkIFRpbWVyOjpzdGFydCgpewogICAgdGhpcy0+cnVuID0gdHJ1ZTsKICAgIHRoaXMtPnByaW50KCk7CiAgICByZXR1cm47Cn0KCnZvaWQgVGltZXI6OnN0b3AoKXsKICAgIHRoaXMtPnJ1biA9IGZhbHNlOwogICAgcmV0dXJuOwp9Cgp2b2lkIFRpbWVyOjpwcmludCgpewoKICAgIGludCBjb3VudGVyID0gMDsKCiAgICB3aGlsZSh0aGlzLT5ydW4gPT0gdHJ1ZSl7CgogICAgICAgIHN0ZDo6Y291dCA8PCBjb3VudGVyIDw8IHN0ZDo6ZW5kbDsKICAgICAgICBjb3VudGVyKys7CgogICAgICAgIHVzbGVlcCg1MDAwMDApOwogICAgfQoKICAgIHJldHVybjsKfQoKdm9pZCAqaGFuZGxlcih2b2lkICphcmd1bWVudCl7CgogICAgKChUaW1lciAqKSBhcmd1bWVudCktPnN0YXJ0KCk7CgogICAgcmV0dXJuIGFyZ3VtZW50Owp9CgppbnQgbWFpbih2b2lkKXsKCiAgICBUaW1lciAqdGltZXIgPSBuZXcgVGltZXIoKTsKICAgIHB0aHJlYWRfdCB0aW1lcl90aHJlYWQ7CiAgICBpbnQgbWFpbkNvdW50ZXIgPSAwOwoKICAgIHB0aHJlYWRfY3JlYXRlKCZ0aW1lcl90aHJlYWQsIE5VTEwsIGhhbmRsZXIsICh2b2lkICopICZ0aW1lcik7CgogICAgd2hpbGUodHJ1ZSl7CgogICAgICAgIGlmKG1haW5Db3VudGVyID09IDEwMCl7CiAgICAgICAgICAgIHN0ZDo6Y291dCA8PCAiU3RvcHBpbmcuLi4iIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgdGltZXItPnN0b3AoKTsKICAgICAgICB9CgogICAgICAgIHN0ZDo6Y291dCA8PCAiID0+ICIgPDwgbWFpbkNvdW50ZXIgPDwgc3RkOjplbmRsOwogICAgICAgIG1haW5Db3VudGVyKys7CgogICAgICAgIHVzbGVlcCg1MDAwMCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCg==