#include <thread>
#include <chrono>
#include <iostream>
using namespace std;
bool func(bool bFlag = false){
cout<<"\t->func1"<<endl;
return bFlag ;
}
void proc(int * p){
if( p )
*p = 0;
}
int calc(int a, int b) throw (const char *){
if( b == 0 )
throw "div on zero";
return a / b;
}
int main(){
volatile int p = 1;
bool result = false;
int * ptr = (int *)(&p);
thread t(proc, ptr);
try{
if
(
(result = p != 0), t.detach(), this_thread::sleep_for (chrono::seconds(5)), result&&
func(calc(1, p))
)
cout<<"true "<<endl;
else
cout<<"false"<<endl;
}
catch(const char * msg){
cout<<msg<<endl;
}
cin.get();
return 0;
}
I2luY2x1ZGUgPHRocmVhZD4KI2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCmJvb2wgZnVuYyhib29sIGJGbGFnID0gZmFsc2UpewogICAgY291dDw8Ilx0LT5mdW5jMSI8PGVuZGw7CiAgICByZXR1cm4gYkZsYWcgOwp9Cgp2b2lkIHByb2MoaW50ICAqIHApewoJaWYoIHAgKQoJKnAgPSAwOwp9CgppbnQgY2FsYyhpbnQgYSwgaW50IGIpIHRocm93IChjb25zdCBjaGFyICopewoJaWYoIGIgPT0gMCApCgkJdGhyb3cgImRpdiBvbiB6ZXJvIjsKCXJldHVybiBhIC8gYjsKfQoKCmludCBtYWluKCl7Cgl2b2xhdGlsZSBpbnQgcCA9IDE7Cglib29sIHJlc3VsdCAgPSBmYWxzZTsKCWludCAqIHB0ciAgICA9IChpbnQgKikoJnApOwoJdGhyZWFkIHQocHJvYywgcHRyKTsKCXRyeXsKCWlmCgkoCgkJKHJlc3VsdCA9IHAgIT0gMCksIHQuZGV0YWNoKCksIHRoaXNfdGhyZWFkOjpzbGVlcF9mb3IgKGNocm9ubzo6c2Vjb25kcyg1KSksIHJlc3VsdCYmCgkJZnVuYyhjYWxjKDEsIHApKSAgCgkpCgkJY291dDw8InRydWUgIjw8ZW5kbDsKCWVsc2UKCQljb3V0PDwiZmFsc2UiPDxlbmRsOwoJfQoJY2F0Y2goY29uc3QgY2hhciAqIG1zZyl7CgkJY291dDw8bXNnPDxlbmRsOwoJfQoJY2luLmdldCgpOwogICAgcmV0dXJuIDA7Cn0K