কম্পিউটার টিউটোরিয়াল

C++11-এ থ্রেড টার্মিনেট করা (std::future ব্যবহার করে)

C++11-এ std::thread-এ সরাসরি টার্মিনেট মেথড নেই (সেফ নয়)। সহযোগিতামূলক (cooperative) টার্মিনেশন জন্য std::promise/std::future ব্যবহার করা হয়।

প্যাটার্ন

  1. মেইন থ্রেডে std::promise<void> বানান।
  2. get_future() দিয়ে std::future<void> পান।
  3. ফিউচারটি ওয়ার্কার থ্রেডে পাস করুন (move সেমান্টিক্স)।
  4. ওয়ার্কার থ্রেডে future.wait_for() দিয়ে পোলিং করুন।
  5. মেইন থ্রেডে 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 (রিকমেন্ডেড)।

  1. অ্যান্ড্রয়েডে বর্তমান থ্রেডের আইডি (ID) পাওয়ার পদ্ধতি

  2. অ্যান্ড্রয়েডে thread.sleep() ব্যবহার করার পদ্ধতি

  3. অ্যান্ড্রয়েডে থ্রেড (Thread) তৈরি করার পদ্ধতি

  4. Tkinter Python-এ Thread ব্যবহার করার পদ্ধতি