1
こんにちは、私はWindowsのC++のスレッドから始めています。スレッドをC++で始める方法(返品)
#include <iostream>
#include <thread>
#include <windows.h>
using namespace std;
static const int num_threads = 2;
CRITICAL_SECTION critSection;
int thread1 (int id) {
EnterCriticalSection (&critSection);
cout <<"thread1 had id: " << id<<endl;
LeaveCriticalSection (&critSection);
return 15;
}
void thread2() {
EnterCriticalSection (&critSection);
cout << "Sleeping"<< endl;
LeaveCriticalSection (&critSection);
Sleep (20);
EnterCriticalSection (&critSection);
cout << "No more"<< endl;
LeaveCriticalSection (&critSection);
}
int main() {
thread t[num_threads];
InitializeCriticalSection (&critSection);
t[0]=thread (thread2);
t[1] = thread (thread1, 1);
EnterCriticalSection (&critSection);
LeaveCriticalSection (&critSection);
t[0].join();
t[1].join();
DeleteCriticalSection (&critSection);
return 0;
}
ので、私の質問は簡単ですが、どのように私はスレッド1からの戻り値を取得し、2番目の質問があるんが、C++でマルチスレッド処理を行うには、この正しい方法はありますか?
あなたは、このような[ 'のstd :: thread'](http://en.cppreference.com/w/cpp/thread/threadなどの標準的なスレッド化機能を使用することを検討すべきです)、['std :: mutex'](http://en.cppreference.com/w/cpp/thread/mutex)、[' std :: lock_guard'](http://en.cppreference.com/w/cpp/thread/lock_guard)と['std :: async'](http://en.cppreference.com/w/cpp/thread/async)を参照してください。 –
私は何かを "返す"関数コールバックを使用したいと思います。 – xander
スレッドは、参照パラメータを使用して結果を返すことができます。参照によって取られた追加の "return"引数を非同期関数に追加し、そのオブジェクトを使用して結果を格納することができます。単純なスレッド作業の場合は、 'std :: async'を使って関数の結果を返すことができます。 –