Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::jthrea..._stop_source(3) C++ Standard Libarystd::jthrea..._stop_source(3)

NAME
       std::jthread::get_stop_source - std::jthread::get_stop_source

Synopsis
	  std::stop_source get_stop_source() noexcept;	(since C++20)

	  Returns  a  std::stop_source	associated  with the same shared stop-
       state as	held
	  internally by	the jthread object.

Parameters
	  (none)

Return value
	  A value of type std::stop_source associated with stop-state held in-
       ternally	by
	  jthread object.

Example
       // Run this code

	#include <chrono>
	#include <condition_variable>
	#include <iostream>
	#include <mutex>
	#include <string_view>
	#include <thread>

	using namespace	std::chrono_literals;

	int main()
	{
	    std::cout << std::boolalpha;
	    auto print =  [](std::string_view  name,  const  std::stop_source&
       source)
	    {
		std::cout  << name << ": stop_possible = " << source.stop_pos-
       sible();
		std::cout << ",	stop_requested = " <<  source.stop_requested()
       << '\n';
	    };

	    // A worker	thread
	    auto worker	= std::jthread([](std::stop_token stoken)
	    {
		for (int i = 10; i; --i)
		{
		    std::this_thread::sleep_for(300ms);
		    if (stoken.stop_requested())
		    {
			std::cout << "	Sleepy worker is requested to stop\n";
			return;
		    }
		    std::cout << "  Sleepy worker goes back to sleep\n";
		}
	    });

	    std::stop_source stop_source = worker.get_stop_source();
	    print("stop_source", stop_source);

	    std::cout << "\nPass source	to other thread:\n";
	    auto stopper = std::thread(
		[](std::stop_source source)
		{
		    std::this_thread::sleep_for(500ms);
		    std::cout << "Request stop for worker via source\n";
		    source.request_stop();
		},
		stop_source);
	    stopper.join();
	    std::this_thread::sleep_for(200ms);
	    std::cout << '\n';

	    print("stop_source", stop_source);
	}

Possible output:
	stop_source: stop_possible = true, stop_requested = false

	Pass source to other thread:
	  Sleepy worker	goes back to sleep
	Request	stop for worker	via source
	  Sleepy worker	is requested to	stop

	stop_source: stop_possible = true, stop_requested = true

http://cppreference.com		  2024.06.10	 std::jthrea..._stop_source(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::jthread::get_stop_source&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help