Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> C++

मैं सी ++ 11 में थ्रेड को कैसे समाप्त करूं?

यहां हम देखेंगे कि C++11 में थ्रेड्स को कैसे समाप्त किया जाए। C++11 में थ्रेड्स को समाप्त करने की सीधी विधि नहीं है।

Std::future का उपयोग थ्रेड के लिए किया जा सकता है, और भविष्य में मूल्य उपलब्ध होने पर इसे बाहर निकल जाना चाहिए। यदि हम थ्रेड को सिग्नल भेजना चाहते हैं, लेकिन वास्तविक मान नहीं भेजते हैं, तो हम शून्य प्रकार की वस्तु पास कर सकते हैं।

एक वादा वस्तु बनाने के लिए, हमें इस सिंटैक्स का पालन करना होगा -

std::promise<void> exitSignal;

अब संबंधित भविष्य की वस्तु को मुख्य समारोह में इस निर्मित वादा वस्तु से प्राप्त करें -

std::future<void> futureObj = exitSignal.get_future();

अब थ्रेड बनाते समय मुख्य कार्य को पास करें, भविष्य की वस्तु को पास करें -

std::thread th(&threadFunction, std::move(futureObj));

उदाहरण

#include <thread>
#include <iostream>
#include <assert.h>
#include <chrono>
#include <future>
using namespace std;
void threadFunction(std::future<void> future){
   std::cout << "Starting the thread" << std::endl;
   while (future.wait_for(std::chrono::milliseconds(1)) == std::future_status::timeout){
      std::cout << "Executing the thread....." << std::endl;
      std::this_thread::sleep_for(std::chrono::milliseconds(500)); //wait for 500 milliseconds
   }
   std::cout << "Thread Terminated" << std::endl;
}
main(){
   std::promise<void> signal_exit; //create promise object
   std::future<void> future = signal_exit.get_future();//create future objects
   std::thread my_thread(&threadFunction, std::move(future)); //start thread, and move future
   std::this_thread::sleep_for(std::chrono::seconds(7)); //wait for 7 seconds
   std::cout << "Threads will be stopped soon...." << std::endl;
   signal_exit.set_value(); //set value into promise
   my_thread.join(); //join the thread with the main thread
   std::cout << "Doing task in main function" << std::endl;
}

आउटपुट

Starting the thread
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Executing the thread.....
Threads will be stopped soon....
Thread Terminated
Doing task in main function

  1. एंड्रॉइड में थ्रेड.स्लीप () का उपयोग कैसे करें?

    एक उदाहरण में जाने से पहले, हमें पता होना चाहिए कि धागा क्या है। एक धागा एक हल्की उप-प्रक्रिया है, यह यूआई को बाधित किए बिना पृष्ठभूमि संचालन करने वाला है। यह उदाहरण एंड्रॉइड में थ्रेड.स्लीप () का उपयोग कैसे करें के बारे में प्रदर्शित करता है। चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फ

  1. एंड्रॉइड में थ्रेड कैसे बनाएं?

    एक उदाहरण में जाने से पहले, हमें पता होना चाहिए कि धागा क्या है। एक धागा एक हल्की उप-प्रक्रिया है, यह यूआई को बाधित किए बिना पृष्ठभूमि संचालन करने वाला है। यह उदाहरण एंड्रॉइड में थ्रेड कैसे बनाएं के बारे में प्रदर्शित करता है। चरण 1 - एंड्रॉइड स्टूडियो में एक नया प्रोजेक्ट बनाएं, फाइल ⇒ न्यू प्रोजे

  1. टिंकर पायथन में थ्रेड का उपयोग कैसे करें?

    Tkinter के साथ, हम थ्रेडिंग का उपयोग करके एक बार में कई फ़ंक्शन कॉल कर सकते हैं . यह किसी एप्लिकेशन में कुछ कार्यों का अतुल्यकालिक निष्पादन प्रदान करता है। पायथन में एक थ्रेड का उपयोग करने के लिए, हम थ्रेडिंग . नामक एक मॉड्यूल आयात कर सकते हैं और इसके थ्रेड . को उपवर्गित करें कक्षा। हमारी नई कक्षा