#include <iostream>
#include <thread>
#include <string>
using namespace std;
class C {
public:
int n;
C(){}
C(int n) : n(n) {}
void f(const string &s) { std::cout << "thread: " << s << ", C::f(): this->n = " << this->n << std::endl; }
};
void sub(C *obj) {
/* サブでC::f() を呼び出す */
obj->f("sub");
/* obj の中身を変える */
obj->n = 12345;
/* サブでC::f() をもう一度呼び出す */
obj->f("sub");
}
int main() {
/* メインスレッドのオブジェクトポインタ= obj */
C *obj = new C(54321);
/* sub スレッド起動 */
thread *subth;
subth = new thread(sub, obj);
/* 1秒待ち */
chrono::seconds d(1);
this_thread::sleep_for(d);
/* メインでC::f() を呼び出す */
obj->f("main");
/* sub スレッド回収 */
subth->join();
delete subth;
delete obj;
return 0;
}
/* end */
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKY2xhc3MgQyB7CnB1YmxpYzoKICBpbnQgbjsKICBDKCl7fQogIEMoaW50IG4pIDogbihuKSB7fQogIHZvaWQgZihjb25zdCBzdHJpbmcgJnMpIHsgc3RkOjpjb3V0IDw8ICJ0aHJlYWQ6ICIgPDwgcyA8PCAiLCBDOjpmKCk6IHRoaXMtPm4gPSAiIDw8IHRoaXMtPm4gPDwgc3RkOjplbmRsOyB9Cn07Cgp2b2lkIHN1YihDICpvYmopIHsKICAvKiDjgrXjg5bjgadDOjpmKCkg44KS5ZG844Gz5Ye644GZICovCiAgb2JqLT5mKCJzdWIiKTsKICAvKiBvYmog44Gu5Lit6Lqr44KS5aSJ44GI44KLICovCiAgb2JqLT5uID0gMTIzNDU7CiAgLyog44K144OW44GnQzo6ZigpIOOCkuOCguOBhuS4gOW6puWRvOOBs+WHuuOBmSAqLwogIG9iai0+Zigic3ViIik7Cn0KCmludCBtYWluKCkgewogIC8qIOODoeOCpOODs+OCueODrOODg+ODieOBruOCquODluOCuOOCp+OCr+ODiOODneOCpOODs+OCvz0gb2JqICovCiAgQyAqb2JqID0gbmV3IEMoNTQzMjEpOwoKICAvKiBzdWIg44K544Os44OD44OJ6LW35YuVICovCiAgdGhyZWFkICpzdWJ0aDsKICBzdWJ0aCA9IG5ldyB0aHJlYWQoc3ViLCBvYmopOwoKICAvKiAx56eS5b6F44GhICovCiAgY2hyb25vOjpzZWNvbmRzIGQoMSk7CiAgdGhpc190aHJlYWQ6OnNsZWVwX2ZvcihkKTsKCiAgLyog44Oh44Kk44Oz44GnQzo6ZigpIOOCkuWRvOOBs+WHuuOBmSAqLwogIG9iai0+ZigibWFpbiIpOwoKICAvKiBzdWIg44K544Os44OD44OJ5Zue5Y+OICovCiAgc3VidGgtPmpvaW4oKTsKICBkZWxldGUgc3VidGg7CgogIGRlbGV0ZSBvYmo7CiAgcmV0dXJuIDA7Cn0KLyogZW5kICovCgo=