Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Definiuje obiekt, który jest używany do obserwowania i zarządzania wątkiem wykonywania w obrębie aplikacji.
Składnia
class thread;
Uwagi
Za pomocą thread
obiektu można obserwować wątek wykonywania w aplikacji i zarządzać nim. Obiekt thread
utworzony przy użyciu konstruktora domyślnego nie jest skojarzony z żadnym wątkiem wykonywania. Obiekt thread
skonstruowany przy użyciu obiektu wywołującego tworzy nowy wątek wykonywania i wywołuje obiekt wywołujący w tym thread
obiekcie .
Thread
Obiekty można przenosić, ale nie kopiować, dlatego wątek wykonywania może być skojarzony tylko z jednym thread
obiektem.
Każdy wątek wykonywania ma unikatowy identyfikator typu thread::id
. Funkcja this_thread::get_id
zwraca identyfikator wywołującego wątku. Funkcja thread::get_id
składowa zwraca identyfikator wątku zarządzanego thread
przez obiekt. W przypadku obiektu thread
skonstruowanego thread::get_id
domyślnie metoda zwraca obiekt, który ma tę samą wartość dla wszystkich obiektów utworzonych thread
domyślnie i różni się od wartości zwracanej przez this_thread::get_id
dowolny wątek wykonywania, który może zostać sprzężony w momencie wywołania.
Elementy członkowskie
Klasy publiczne
Nazwa/nazwisko | opis |
---|---|
id |
Jednoznacznie identyfikuje skojarzony wątek. |
Konstruktory publiczne
Nazwa/nazwisko | opis |
---|---|
thread |
thread Tworzy obiekt. |
Metody publiczne
Nazwa/nazwisko | opis |
---|---|
detach |
Odłącza skojarzony wątek od thread obiektu. |
get_id |
Zwraca unikatowy identyfikator skojarzonego wątku. |
hardware_concurrency |
Statyczny. Zwraca szacunkową liczbę kontekstów wątków sprzętu. |
join |
Blokuje, aż do zakończenia skojarzonego wątku. |
joinable |
Określa, czy skojarzony wątek podlega sprzęganiu. |
native_handle |
Zwraca typ zależny od implementacji, który reprezentuje dojście wątku. |
swap |
Zamienia stan obiektu na określony thread obiekt. |
Operatory publiczne
Nazwa/nazwisko | opis |
---|---|
thread::operator= |
Kojarzy wątek z bieżącym thread obiektem. |
Wymagania
Nagłówek:<thread>
Przestrzeń nazw: std
detach
Odłącza skojarzony wątek. System operacyjny staje się odpowiedzialny za wydawanie zasobów wątków po zakończeniu.
void detach();
Uwagi
Po wywołaniu metody detach
do programu kolejne wywołania w celu get_id
zwrócenia id
polecenia .
Jeśli wątek skojarzony z obiektem wywołującym nie jest możliwy do sprzężenia, funkcja zgłasza system_error
kod invalid_argument
błędu .
Jeśli wątek skojarzony z obiektem wywołującym jest nieprawidłowy, funkcja zgłasza system_error
kod błędu no_such_process
.
get_id
Zwraca unikatowy identyfikator skojarzonego wątku.
id get_id() const noexcept;
Wartość zwracana
Obiekt id
, który jednoznacznie identyfikuje skojarzony wątek lub id()
jeśli żaden wątek nie jest skojarzony z obiektem.
hardware_concurrency
Metoda statyczna zwracająca oszacowanie liczby kontekstów wątków sprzętowych.
static unsigned int hardware_concurrency() noexcept;
Wartość zwracana
Oszacowanie liczby kontekstów wątków sprzętowych. Jeśli nie można obliczyć wartości lub nie jest dobrze zdefiniowana, ta metoda zwraca wartość 0.
Specyficzne dla firmy Microsoft
hardware_concurrency
Zwraca liczbę procesorów logicznych, która odpowiada liczbie wątków sprzętowych, które mogą być wykonywane jednocześnie. Uwzględnia liczbę procesorów fizycznych, liczbę rdzeni w każdym procesorze fizycznym i jednoczesne wielowątkowość na każdym rdzeniu.
Przed systemami Windows 11 i Windows Server 2022 aplikacje były domyślnie ograniczone do jednej grupy procesorów, co ma maksymalnie 64 procesory logiczne. Ogranicza to liczbę równoczesnych wątków do 64. Aby uzyskać więcej informacji, zobacz Grupy procesorów.
Począwszy od systemów Windows 11 i Windows Server 2022, procesy i ich wątki mają koligacje procesora, które domyślnie obejmują wszystkie procesory w systemie i w wielu grupach na maszynach z ponad 64 procesorami. Limit liczby równoczesnych wątków jest teraz całkowitą liczbą procesorów logicznych w systemie.
Klasa id
Udostępnia unikatowy identyfikator dla każdego wątku wykonywania w procesie.
class thread::id {
id() noexcept;
};
Uwagi
Domyślny konstruktor tworzy obiekt, który nie jest porównywany z obiektem thread::id
dla żadnego istniejącego wątku.
Wszystkie obiekty skonstruowane thread::id
domyślnie są równe.
join
Blokuje do momentu zakończenia wątku wykonywania skojarzonego z obiektem wywołującym.
void join();
Uwagi
Jeśli wywołanie powiedzie się, kolejne wywołania get_id
obiektu wywołującego zwracają wartość domyślną thread::id
, która nie jest porównywana z thread::id
żadnym istniejącym wątkiem; jeśli wywołanie nie powiedzie się, wartość zwrócona przez get_id
element jest niezmieniona.
joinable
Określa, czy skojarzony wątek podlega sprzęganiu.
bool joinable() const noexcept;
Wartość zwracana
true
jeśli skojarzony wątek jest sprzężony; w przeciwnym razie, false
.
Uwagi
Obiekt wątku można sprzężyć, jeśli get_id() != id()
.
native_handle
Zwraca typ zależny od implementacji, który reprezentuje dojście wątku. Uchwyt wątku może być używany w sposób specyficzny dla implementacji.
native_handle_type native_handle();
Wartość zwracana
native_handle_type
jest definiowany jako rzutowanie Win32 HANDLE
jako void *
.
thread::operator=
Kojarzy wątek określonego obiektu z bieżącym obiektem.
thread& operator=(thread&& Other) noexcept;
Parametry
Other
Obiekt thread
.
Wartość zwracana
*this
Uwagi
Metoda wywołuje metodę odłączenia, jeśli obiekt wywołujący jest sprzężony.
Po utworzeniu Other
skojarzenia jest ustawiona wartość stanu domyślnego.
swap
Zamienia stan obiektu na thread
określony obiekt.
void swap(thread& Other) noexcept;
Parametry
Other
Obiekt thread
.
thread
konstruktor
thread
Tworzy obiekt.
thread() noexcept;
template <class Fn, class... Args>
explicit thread(Fn&& F, Args&&... A);
thread(thread&& Other) noexcept;
Parametry
F
Funkcja zdefiniowana przez aplikację do wykonania w wątku.
A
Lista argumentów, które mają zostać przekazane do F
elementu .
Other
Istniejący thread
obiekt.
Uwagi
Pierwszy konstruktor tworzy obiekt, który nie jest skojarzony z wątkiem wykonywania. Wartość zwracana przez get_id
dla skonstruowanego obiektu to thread::id()
.
Drugi konstruktor tworzy obiekt skojarzony z nowym wątkiem wykonywania. Wykonuje ona pseudo-funkcję INVOKE
zdefiniowaną w pliku <functional>
. Jeśli za mało zasobów jest dostępnych do uruchomienia nowego wątku, funkcja zgłasza system_error
obiekt, który zawiera kod błędu resource_unavailable_try_again
. Jeśli wywołanie metody w celu F
zakończenia z nieuchwyconym wyjątkiem, terminate
jest wywoływane. Wywołanie F
nie może spowodować przedwczesnego zakończenia wątku, takiego jak wywołanie ExitThread
lub _endthreadex
.
Trzeci konstruktor tworzy obiekt skojarzony z wątkiem skojarzonym z elementem Other
.
Other
parametr jest następnie ustawiany na stan domyślny.