std::thread::thread
提供:cppreference.com
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
| thread(); |
(1) | (C + + 11以来) |
| thread( thread&& other ); |
(2) | (C + + 11以来) |
| template< class Function, class... Args > explicit thread( Function&& f, Args&&... args ); |
(3) | (C + + 11以来) |
| thread(const thread&) = delete; |
(4) | (C + + 11以来) |
新しいThreadオブジェクトを構築します.
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.
You can help to correct and verify the translation. Click here for instructions.
1)
スレッドを表すものではありません新しいThreadオブジェクトを作成します。.
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.
You can help to correct and verify the translation. Click here for instructions.
2)
コンストラクタを移動します。
otherで表現されたスレッドの実行を表現するために、スレッドオブジェクトを構築します。このコールの後otherもはや実行中のスレッドを表していません.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.
You can help to correct and verify the translation. Click here for instructions.
3)
実行のスレッドに新たな
std::threadオブジェクトと関連付け、それを作成します。最初のコンストラクタは関数であるかのようにスレッドローカルストレージへのすべての引数のargs...をコピーします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.
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); }
@ @引数の評価やコピー中にスローされた例外は、現在のスレッドではなく、新しいスレッドでスローされた.
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.
You can help to correct and verify the translation. Click here for instructions.
@ @新しいスレッドで実行されるコードは次のように定義される。 {{tr|}None
copied_argsを参照してみましょう}と<code>t1、t2、...、tN、どこ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:</code>
-
fがクラスTのメンバ関数へのポインタであるなら、それが呼び出されます。戻り値は無視されます。効果的に、次のコードが実行されますOriginal:Iffis pointer to a member function of classT, 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)
t1のタイプはどちらTである場合、またはTTから派生した型への参照の.Original:(t1.*f)(t2, ..., tN) if the type oft1is eitherT, reference toTor reference to type derived fromT.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)その他のとき.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.
-
- N == 1場合と
f、それはクラスのメンバデータオブジェクトへのポインタにアクセスされています。オブジェクトの値は無視されます。効果的に、次のコードが実行されますOriginal:If N == 1 andfis 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いただくと
t1のタイプはどちらTですTまたはTから派生した型への参照の.Original:t1.*f if and the type oft1is eitherT, reference toTor reference to type derived fromT.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - (*t1).*fその他のとき.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他のすべてのケースで非メンバ関数へのポインタと呼ばれている。戻り値は無視されます。効果的に、f(t1, t2, ..., tN)が実行されます.Original:fis 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. {{tr|}None
copied_argsを参照してみましょう}と<code>t1、t2、...、tN、どこ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:</code>
-
fがクラスTのメンバ関数へのポインタであるなら、それが呼び出されます。戻り値は無視されます。効果的に、次のコードが実行されますOriginal:Iffis pointer to a member function of classT, 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)
t1のタイプはどちらTである場合、またはTTから派生した型への参照の.Original:(t1.*f)(t2, ..., tN) if the type oft1is eitherT, reference toTor reference to type derived fromT.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)その他のとき.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.
-
- N == 1場合と
f、それはクラスのメンバデータオブジェクトへのポインタにアクセスされています。オブジェクトの値は無視されます。効果的に、次のコードが実行されますOriginal:If N == 1 andfis 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いただくと
t1のタイプはどちらTですTまたはTから派生した型への参照の.Original:t1.*f if and the type oft1is eitherT, reference toTor reference to type derived fromT.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - (*t1).*fその他のとき.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他のすべてのケースで非メンバ関数へのポインタと呼ばれている。戻り値は無視されます。効果的に、f(t1, t2, ..., tN)が実行されます.Original:fis 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.
You can help to correct and verify the translation. Click here for instructions.
4)
コピーコンストラクタが削除され、スレッドがコピー可能ではありません。いいえ2
std::threadオブジェクトが同じスレッドの実行を表すことができない.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.
You can help to correct and verify the translation. Click here for instructions.
目次 |
[編集] パラメータ
| other | - | 別のスレッドオブジェクトは、このスレッドオブジェクトを構築します
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 | - | 新しいスレッドで実行する関数
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... | - | 引数は、新しい関数に渡す
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. |
[編集] 例外
1-2)
3)
std::system_errorスレッドが開始できなかった場合。例外は、エラー条件
std::errc::resource_unavailable_try_againまたは別の実装固有のエラー状態を表すかもしれません.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.
You can help to correct and verify the translation. Click here for instructions.
[編集] ノート
スレッド関数への引数は値でコピーされます。参照引数はスレッド関数に渡す必要があるなら、それは(例えばstd::refまたは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.
You can help to correct and verify the translation. Click here for instructions.
関数からの戻り値は無視されます。関数が例外をスローした場合、std::terminateが呼び出されます。呼び出し元のスレッドに戻り値や例外を渡すためには、std::promiseまたはstd::asyncを使用することができる.
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.
You can help to correct and verify the translation. Click here for instructions.
[編集] 例
#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