Varianti

std::thread::thread

Da cppreference.com.


 
 
Discussione libreria di supporto
Threads
Original:
Threads
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
thread(C++11)
this_thread spazio dei nomi
Original:
this_thread namespace
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
get_id(C++11)
yield(C++11)
sleep_for(C++11)
sleep_until(C++11)
Mutua esclusione
Original:
Mutual exclusion
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
mutex(C++11)
timed_mutex(C++11)
Blocco di gestione generico
Original:
Generic lock management
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
lock_guard(C++11)
unique_lock(C++11)
defer_lock_t
try_to_lock_t
adopt_lock_t
(C++11)
(C++11)
(C++11)
lock(C++11)
try_lock(C++11)
defer_lock
try_to_lock
adopt_lock
(C++11)
(C++11)
(C++11)
Condizioni variabili
Original:
Condition variables
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
condition_variable(C++11)
condition_variable_any(C++11)
notify_all_at_thread_exit(C++11)
cv_status(C++11)
Futures
Original:
Futures
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
promise(C++11)
future(C++11)
shared_future(C++11)
packaged_task(C++11)
async(C++11)
launch(C++11)
future_status(C++11)
future_error(C++11)
future_category(C++11)
future_errc(C++11)
 
std::thread
Membri classi
Original:
Member classes
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
thread::id
Membri funzioni
Original:
Member functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
thread::thread
thread::~thread
thread::operator=
Osservatori
Original:
Observers
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
thread::joinable
thread::get_id
thread::native_handle
thread::hardware_concurrency
Operazioni
Original:
Operations
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
thread::join
thread::detach
thread::swap
Non membri funzioni
Original:
Non-member functions
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
std::swap
 
<tbody> </tbody>
thread();
(1) (dal C++11)
thread( thread&& other );
(2) (dal C++11)
template< class Function, class... Args > explicit thread( Function&& f, Args&&... args );
(3) (dal C++11)
thread(const thread&) = delete;
(4) (dal C++11)
Costruisce oggetto nuova discussione.
Original:
Constructs new thread object.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
1)
Crea nuovo oggetto thread che non rappresenta un filo.
Original:
Creates new thread object which does not represent a thread.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
2)
Sposta costruttore. Costruisce l'oggetto thread per rappresentare il thread di esecuzione che è stata rappresentata da other. Dopo questa chiamata other non rappresenta più un thread di esecuzione.
Original:
Move constructor. Constructs the thread object to represent the thread of execution that was represented by other. After this call other no longer represents a thread of execution.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
3)
Crea nuovo std::thread oggetto e lo associa un thread di esecuzione. In primo luogo il costruttore copia tutti args... argomenti per thread-local storage come se per la funzione:
Original:
Creates new std::thread object and associates it with a thread of execution. First the constructor copies all arguments args... to thread-local storage as if by the function:
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
template <class T>
typename decay<T>::type decay_copy(T&& v) {
    return std::forward<T>(v);
}
@ @ Tutte le eccezioni generate durante la valutazione e la copia degli argomenti vengono gettati nel thread corrente non, il nuovo thread.
Original:
@@ Any exceptions thrown during evaluation and copying of the arguments are thrown in the current thread, not the new thread.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
@ @ Il codice che verrà eseguito nel nuovo thread è definito come segue. Facciamo riferimento al Nonecopied_args come t1, t2,..., tN, dove N è
sizeof...(copied_args)and copied_args is the result of calling decay_copy as defined above. The following code will be run in the new thread:
  • Se f è puntatore a una funzione membro della classe T, allora si chiama. Il valore restituito viene ignorato. In effetti, il codice riportato di seguito viene eseguito:
    Original:
    If f is pointer to a member function of class T, then it is called. The return value is ignored. Effectively, the following code is executed:
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • (t1.*f)(t2, ..., tN) se il tipo di t1 è o T, il riferimento a T o riferimenti alle tipo derivato da T.
    Original:
    (t1.*f)(t2, ..., tN) if the type of t1 is either T, reference to T or reference to type derived from T.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • ((*t1).*f)(t2, ..., tN) altrimenti.
    Original:
    ((*t1).*f)(t2, ..., tN) otherwise.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Se N == 1 e f è puntatore a un oggetto membro dati di una classe, quindi vi si accede. Il valore dell'oggetto viene ignorato. In effetti, il codice riportato di seguito viene eseguito:
    Original:
    If N == 1 and f is pointer to a member data object of a class, then it is accessed. The value of the object is ignored. Effectively, the following code is executed:
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • t1.*f se e il tipo di t1 è o T, riferimento alla T o riferimento tipo derivato da T.
    Original:
    t1.*f if and the type of t1 is either T, reference to T or reference to type derived from T.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • (*t1).*f altrimenti.
    Original:
    (*t1).*f otherwise.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • f si chiama come un puntatore a una funzione non membro in tutti gli altri casi. Il valore restituito viene ignorato. In effetti, f(t1, t2, ..., tN) viene eseguito.
    Original:
    f is called as a pointer to a non-member function in all other cases. The return value is ignored. Effectively, f(t1, t2, ..., tN) is executed.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
Original:
@@ The code that will be run in the new thread is defined as follows. Facciamo riferimento al Nonecopied_args come t1, t2,..., tN, dove N è
sizeof...(copied_args)and copied_args is the result of calling decay_copy as defined above. The following code will be run in the new thread:
  • Se f è puntatore a una funzione membro della classe T, allora si chiama. Il valore restituito viene ignorato. In effetti, il codice riportato di seguito viene eseguito:
    Original:
    If f is pointer to a member function of class T, then it is called. The return value is ignored. Effectively, the following code is executed:
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • (t1.*f)(t2, ..., tN) se il tipo di t1 è o T, il riferimento a T o riferimenti alle tipo derivato da T.
    Original:
    (t1.*f)(t2, ..., tN) if the type of t1 is either T, reference to T or reference to type derived from T.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • ((*t1).*f)(t2, ..., tN) altrimenti.
    Original:
    ((*t1).*f)(t2, ..., tN) otherwise.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • Se N == 1 e f è puntatore a un oggetto membro dati di una classe, quindi vi si accede. Il valore dell'oggetto viene ignorato. In effetti, il codice riportato di seguito viene eseguito:
    Original:
    If N == 1 and f is pointer to a member data object of a class, then it is accessed. The value of the object is ignored. Effectively, the following code is executed:
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • t1.*f se e il tipo di t1 è o T, riferimento alla T o riferimento tipo derivato da T.
    Original:
    t1.*f if and the type of t1 is either T, reference to T or reference to type derived from T.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • (*t1).*f altrimenti.
    Original:
    (*t1).*f otherwise.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
  • f si chiama come un puntatore a una funzione non membro in tutti gli altri casi. Il valore restituito viene ignorato. In effetti, f(t1, t2, ..., tN) viene eseguito.
    Original:
    f is called as a pointer to a non-member function in all other cases. The return value is ignored. Effectively, f(t1, t2, ..., tN) is executed.
    The text has been machine-translated via Google Translate.
    You can help to correct and verify the translation. Click here for instructions.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
4)
Il costruttore di copia, è soppresso il thread non sono copiabili. Non ci sono due std::thread oggetti possono rappresentare lo stesso thread di esecuzione.
Original:
The copy constructor is deleted; threads are not copyable. No two std::thread objects may represent the same thread of execution.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Parametri

other -
un altro oggetto thread per costruire questo oggetto filo con
Original:
another thread object to construct this thread object with
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
f -
funzione da eseguire nel nuovo thread
Original:
function to execute in the new thread
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
args... -
argomenti da passare alla nuova funzione
Original:
arguments to pass to the new function
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Eccezioni

1-2)
noexcept specification:  
<tbody> </tbody>
noexcept
  (dal C++11)
3)
std::system_error se il thread non può essere avviato. L'eccezione può rappresentare il std::errc::resource_unavailable_try_again condizione di errore o un'altra implementazione specifica condizione di errore.
Original:
std::system_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 condition.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Note

Gli argomenti della funzione di thread vengono copiati per valore. Se un argomento di riferimento deve essere passato alla funzione thread, deve essere avvolto (ad esempio con std::ref o std::cref).
Original:
The arguments to the thread function are copied by value. If a reference argument needs to be passed to the thread function, it has to be wrapped (e.g. with std::ref or std::cref).
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Qualsiasi valore restituito dalla funzione viene ignorata. Se la funzione genera un'eccezione, std::terminate si chiama. Per superare i valori di ritorno o eccezioni nuovo al thread chiamante, std::promise o std::async può essere utilizzato.
Original:
Any return value from the function is ignored. If the function throws an exception, std::terminate is called. In order to pass return values or exceptions back to the calling thread, std::promise or std::async may be used.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Esempio

#include <iostream>
#include <utility>
#include <thread>
#include <chrono>
#include <functional>
#include <atomic>

void f1(int n)
{
    for(int i=0; i<5; ++i) {
        std::cout << "Thread " << n << " executing\n";
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
}

void f2(int& n)
{
    for(int i=0; i<5; ++i) {
        std::cout << "Thread 2 executing\n";
        ++n;
        std::this_thread::sleep_for(std::chrono::milliseconds(10));
    }
}

int main()
{
    int n = 0;
    std::thread t1; // t1 is not a thread
    std::thread t2(f1, n+1); // pass by value
    std::thread t3(f2, std::ref(n)); // pass by reference
    std::thread t4(std::move(t3)); // t4 is now running f2(). t3 is no longer a thread
    t2.join();
    t4.join();
    std::cout << "Final value of n is " << n << '\n';
}

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 1 executing
Thread 2 executing
Final value of n is 5