कैच हैंडलर नहीं चलाया जाता है। पर क्यों?यह कोड ब्लॉक को निष्पादित क्यों नहीं करता है?
यदि try
ब्लॉक से पहले शुरू किया गया है, तो कैच हैंडलर चलता है।
यदि कैच ब्लॉक का प्रकार फेंकने वाले प्रकार से मेल नहीं खाता है, तो प्रोग्राम यह बताता है कि थ्रेड को बिना किसी अपवाद के समाप्त कर दिया गया है, यह बताते हुए कि अपवाद को संभाला जाता है, फिर भी कैच ब्लॉक नहीं चलाया जाता है।
#include <iostream>
#include <thread>
using namespace std;
void do_work() {}
int main() {
std::cerr << "RUNNING" << std::endl;
try {
thread t(do_work);
std::cerr << "THROWING" << std::endl;
throw logic_error("something went wrong");
} catch (logic_error e) {
std::cerr << "GOTCHA" << std::endl;
}
return 0;
}
संकलित आदेश:
try {
thread t(do_work);
t.join(); // <<< add this
std::cerr << "THROWING" << std::endl;
throw logic_error("something went wrong");
} catch (logic_error e) {
std::cerr << "GOTCHA" << std::endl;
}
एक joinable thread that goes out of scope, causes terminate
to be called:
c++ -std=c++14 -pthread -pedantic -Wall -Wextra -O0 scratch.cpp -o scratch
सबमिट बटन को मारने से पहले कृपया अपना कोड इंडेंट करें – bhavesh
पृथ्वी पर इसका डाउनवोट क्यों है? \ * स्क्रैच हेड \ * –
@ लाइटनेसरेसेसिन ऑर्बिट किसी ने कोड को तोड़ने के बाद शायद वापस डाउनवॉट किया था। – user2079303