C++11-এ std::thread-এ সরাসরি টার্মিনেট মেথড নেই (সেফ নয়)। সহযোগিতামূলক (cooperative) টার্মিনেশন জন্য std::promise/std::future ব্যবহার করা হয়।
প্যাটার্ন
- মেইন থ্রেডে
std::promise<void>বানান। get_future()দিয়েstd::future<void>পান।- ফিউচারটি ওয়ার্কার থ্রেডে পাস করুন (move সেমান্টিক্স)।
- ওয়ার্কার থ্রেডে
future.wait_for()দিয়ে পোলিং করুন। - মেইন থ্রেডে
promise.set_value()কল করলে ফিউচার রেডি হয়, থ্রেড এক্সিট করে।
উদাহরণ কোড
#include <thread>
#include <iostream>
#include <chrono>
#include <future>
using namespace std;
void threadFunction(future<void> future) {
cout << "Thread started" << endl;
while (future.wait_for(chrono::milliseconds(1)) == future_status::timeout) {
cout << "Executing thread..." << endl;
this_thread::sleep_for(chrono::milliseconds(500));
}
cout << "Thread terminated" << endl;
}
int main() {
promise<void> exitSignal;
future<void> futureObj = exitSignal.get_future();
thread my_thread(threadFunction, move(futureObj));
this_thread::sleep_for(chrono::seconds(7));
cout << "Stopping thread soon..." << endl;
exitSignal.set_value(); // টার্মিনেশন সিগন্যাল
my_thread.join(); // থ্রেড জয়েন
cout << "Main continues" << endl;
return 0;
}
আউটপুট
Thread started Executing thread... (repeated) Stopping thread soon... Thread terminated Main continues
বিকল্প: std::atomic<bool> ফ্ল্যাগ, std::condition_variable, বা C++20 std::stop_token/std::jthread (রিকমেন্ডেড)।