renzo stdthread:thread-cppreterence.com
std::thread::thread
thread(): 0) ance Coan
thread( thread6é other ); since Cen)
templates class Function, class... Args >
explicit thread( Functionés f, Argss&... args );
thread(const threads) = delete; (since Creat)
©) Geince cra)
Constructs new thread object,
1) Creates new thread object which does not represent a thread,
2) Move constructor. Constructs the thread object to represent the thread of execution that was represented by
‘other. After this cali other no longer represents a thread of execution.
3) Creates new std: thread object and associates it with a thread of execution. The new thread of execution
starts executing
std: invoke(decay_copy (std: :forvard
(t)), decay_copy (std: :forwaré(args))...)
where decay_copy is defined as
template
std::decay t decay_copy(T&& v) { return std::forward(v); }
Except that the calls to decay_copy are evaluated in the context of the caller, so that
evaluation and copying/movirg of the arguments are thrown in the current thread, wit
thread,
The completion of the invocation of the constructor synchronizes-with (as defined in std::memory_order)
the beginning of the invocation af the copy of Fon the new thread af execution,
ny exceptions thrown during
‘out starting the new
This constructor does not participate in overload resolution if std: :decay_t is the
same type as std::thread (since c#+20)
4) The copy constructor is deleted; threads are not copyable. No two std: :thread objects may represent the
same thread of execution
Parameters
other - another thread object to construct this thread object with
f = Callable object to execute in the new thread
args... ~ arguments to pass to the new function
Postcondi
1) get_id() equal to std:: thread: :id() (i.e. joinable is false )
2) other.get_id()) equal to std: : thread: :id() and get_id() returns the value of other. get_id() prior
to the start af construction
3) get_id() not equal to std: : thread: :id() (Le. joinable is true)
Exceptions
1.2) noexcept specification: _noexcept
3) std: :systen_error if the thread could not be started, The exception may represent the error condition
std: :errc::resource_unavailable_try_again or another implementation-specific error congition,
Notes
‘The arguments to the thread function are moved or copied by value. Ifa reference argument needs to be passed to
the thread function, it has to be wrapped (e.g. with std: :ref or std: :cref)
hitpilen.cppreterence.com/wleppitveadeadtiread 12renzo
Example
include
#include
include
#include
include
#include
void f1(int n)
{
for (int i= 0; i< 5; ++i)
std::cout << "Thread 1 executing\n";
stdiithis_thread: :sleep_for(std: chrono
d
d
void f2(int& n)
for (int i= 0; i< 5; +44) ¢
std::cout << "Thread 2 executing\n";
std: :this_thread
y
y
int main()
q
int n= 9;
std::thread tl; // tl is not a thread
std::thread t2(fl, n + 1); // pass by value
std::thread t3(f2, std::ref(n)); // pass by
std: :thread t4(std::move(t3)); // t4 is now
t2.join();
t4.join();
std::cout << "Final value of n is " << n <<
y
Possible output
Thread 1 executing
Thread 2 executing
Thread 1 executing
Thread 2 executing
Thread 1 executing
Thread 2 executing
Thread 1 executing
Thread 2 executing
Thread 2 executing
Thread 1 executing
Final value of n is 5
References
+ C411 standard (ISO/IEC 14882:2011):
sleep_for(std: :chrono:
stdthread:thread-cppreterence.com
‘Any return value from the function is ignored. If the function throws an exception, std
order to pass return values or exceptions back to the calling thread,
-erminate is called. In
promise or std: :async may be used.
miltiseconds(10)) :
milliseconds (19)) ;
reference
running 2(). t3 is no longer a thread
An
+ 30.3.1.2 thread constructors [thread.thread.constr]
Retrieved from "ip en. cppreference comimwikiindex php7elle=cpethreadihreadRireadGolid=B6542
hitpilen.cppreterence.com/wleppitveadeadtiread
22