Udostępnij za pośrednictwem


thread Klasa

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 threadobiekcie . 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 detachdo programu kolejne wywołania w celu get_id zwrócenia idpolecenia .

Jeśli wątek skojarzony z obiektem wywołującym nie jest możliwy do sprzężenia, funkcja zgłasza system_error kod invalid_argumentbłę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 Felementu .

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.

Zobacz też

Odwołanie do plików nagłówka
<thread>