#include <iostream>
#include <pthread.h>
class Example {
public:
Example () : thread_() {
int rcode = pthread_create(&thread_, nullptr, Example::task, nullptr);
if (rcode != 0) {
std::cout << "pthread_create failed. Return code: " << rcode << std::endl;
}
}
/* New code below this point. */
~Example () {
int rcode = pthread_join(thread_, nullptr);
if (rcode != 0) {
std::cout << "pthread_join failed. Return code: " << rcode << std::endl;
}
}
/* New code above this point. */
static void * task (void *) {
std::cout << "Running task." << std::endl;
return nullptr;
}
private:
pthread_t thread_;
};
int main () {
Example example;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cHRocmVhZC5oPgoKY2xhc3MgRXhhbXBsZSB7CnB1YmxpYzoKICBFeGFtcGxlICgpIDogdGhyZWFkXygpIHsKICAgIGludCByY29kZSA9IHB0aHJlYWRfY3JlYXRlKCZ0aHJlYWRfLCBudWxscHRyLCBFeGFtcGxlOjp0YXNrLCBudWxscHRyKTsKICAgIGlmIChyY29kZSAhPSAwKSB7CiAgICAgIHN0ZDo6Y291dCA8PCAicHRocmVhZF9jcmVhdGUgZmFpbGVkLiBSZXR1cm4gY29kZTogIiA8PCByY29kZSA8PCBzdGQ6OmVuZGw7CiAgICB9CiAgfQoKICAvKiBOZXcgY29kZSBiZWxvdyB0aGlzIHBvaW50LiAqLwoKICB+RXhhbXBsZSAoKSB7CiAgICBpbnQgcmNvZGUgPSBwdGhyZWFkX2pvaW4odGhyZWFkXywgbnVsbHB0cik7CiAgICBpZiAocmNvZGUgIT0gMCkgewogICAgICBzdGQ6OmNvdXQgPDwgInB0aHJlYWRfam9pbiBmYWlsZWQuIFJldHVybiBjb2RlOiAiIDw8IHJjb2RlIDw8IHN0ZDo6ZW5kbDsKICAgIH0KICB9CgogIC8qIE5ldyBjb2RlIGFib3ZlIHRoaXMgcG9pbnQuICovCgogIHN0YXRpYyB2b2lkICogdGFzayAodm9pZCAqKSB7CiAgICBzdGQ6OmNvdXQgPDwgIlJ1bm5pbmcgdGFzay4iIDw8IHN0ZDo6ZW5kbDsKICAgIHJldHVybiBudWxscHRyOwogIH0KCnByaXZhdGU6CiAgcHRocmVhZF90IHRocmVhZF87Cn07CgppbnQgbWFpbiAoKSB7CiAgRXhhbXBsZSBleGFtcGxlOwp9Cg==