#include <iostream>
#include <thread>
#include <chrono>
struct AbstractImage
{
private:
static void LoadImages();
friend void LoadImagesStarter();
};
//...
void AbstractImage::LoadImages()
{
using namespace std::chrono_literals;
std::cout << '[' << std::this_thread::get_id() << "] Loading Images..." << std::endl;
std::this_thread::sleep_for(2s);
std::cout << '[' << std::this_thread::get_id() << "] Done" << std::endl;
}
__attribute__((constructor)) void LoadImagesStarter()
{
std::thread(AbstractImage::LoadImages).detach();
}
//#pragma startup LoadImagesStarter 100
int main()
{
using namespace std::chrono_literals;
std::cout << '[' << std::this_thread::get_id() << "] Sleeping 5s..." << std::endl;
std::this_thread::sleep_for(5s);
std::cout << '[' << std::this_thread::get_id() << "] Done" << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dGhyZWFkPgojaW5jbHVkZSA8Y2hyb25vPgoKc3RydWN0IEFic3RyYWN0SW1hZ2UKewpwcml2YXRlOgogICAgc3RhdGljIHZvaWQgTG9hZEltYWdlcygpOwoKICAgIGZyaWVuZCB2b2lkIExvYWRJbWFnZXNTdGFydGVyKCk7Cn07Ci8vLi4uCgp2b2lkIEFic3RyYWN0SW1hZ2U6OkxvYWRJbWFnZXMoKQp7Cgl1c2luZyBuYW1lc3BhY2Ugc3RkOjpjaHJvbm9fbGl0ZXJhbHM7CglzdGQ6OmNvdXQgPDwgJ1snIDw8IHN0ZDo6dGhpc190aHJlYWQ6OmdldF9pZCgpIDw8ICJdIExvYWRpbmcgSW1hZ2VzLi4uIiA8PCBzdGQ6OmVuZGw7CglzdGQ6OnRoaXNfdGhyZWFkOjpzbGVlcF9mb3IoMnMpOwoJc3RkOjpjb3V0IDw8ICdbJyA8PCBzdGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQoKSA8PCAiXSBEb25lIiA8PCBzdGQ6OmVuZGw7Cn0KCl9fYXR0cmlidXRlX18oKGNvbnN0cnVjdG9yKSkgdm9pZCBMb2FkSW1hZ2VzU3RhcnRlcigpCnsKICAgIHN0ZDo6dGhyZWFkKEFic3RyYWN0SW1hZ2U6OkxvYWRJbWFnZXMpLmRldGFjaCgpOwp9CgovLyNwcmFnbWEgc3RhcnR1cCBMb2FkSW1hZ2VzU3RhcnRlciAxMDAKCmludCBtYWluKCkKewoJdXNpbmcgbmFtZXNwYWNlIHN0ZDo6Y2hyb25vX2xpdGVyYWxzOwoJc3RkOjpjb3V0IDw8ICdbJyA8PCBzdGQ6OnRoaXNfdGhyZWFkOjpnZXRfaWQoKSA8PCAiXSBTbGVlcGluZyA1cy4uLiIgPDwgc3RkOjplbmRsOwoJc3RkOjp0aGlzX3RocmVhZDo6c2xlZXBfZm9yKDVzKTsKCXN0ZDo6Y291dCA8PCAnWycgPDwgc3RkOjp0aGlzX3RocmVhZDo6Z2V0X2lkKCkgPDwgIl0gRG9uZSIgPDwgc3RkOjplbmRsOwoJcmV0dXJuIDA7Cn0=