スレッドに基づいて動作するC++ Webサーバーexampleが見つかりました。私はスレッド結合はどのように機能しますか?
server_thread.join();
std::cout<<"Before thread join\n";
server_thread.join();
std::cout<<"5 sec delay starting ...\n";
this_thread::sleep_for(chrono::seconds(5));
std::cout<<"5 sec delay ended\n";
の結果からline 161置き換え
は明らかjoin
後のコードが実行されていないことを示しています。
123
{"firstName": "John","lastName": "Smith","age": 25}
John Smith
Before thread join
以下の簡単な例では、thread_2.join();
というコードも実行されますが、両スレッドが解放されるまでは、最終的には実行されません。std::cout
.join();
のロジックは何ですか現在のスレッドを一時停止しますか?
server_thread.join();
がサーバーと並行して実行された後でコードを欲しい場合は、適切な解決策は何ですか?
main.cppに
#include <boost/thread.hpp>
#include <iostream>
#include <thread>
void task1() {
// do stuff
for(int i=0;i<10;i++)
{
std::cout<<"task1 "<<"["<<i<<"]\n";
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
void task2()
{
for(int i=0;i<10;i++)
{
std::cout<<"task2 "<<"["<<i<<"]\n";
std::this_thread::sleep_for(std::chrono::seconds(1));
}
}
int main()
{
using namespace boost;
std::thread thread_1 = std::thread(task1);
std::thread thread_2 = std::thread(task2);
// do other stuff
thread_2.join();
thread_1.join();
// std::this_thread::sleep_for(std::chrono::seconds(10));
std::cout<<"end of main function\n";
return 0;
}
結果:
task1 [0]
task2 [0]
task1 [1]
task2 [1]
task1 [2]
task2 [2]
task1 [task2 [33]
]
task2 [4]
task1 [4]
task2 [5]
task1 [5]
task2 task1 [[66]
]
task2 [task1 [77]
]
task2 task1 [[88]
]
task2 [9]
task1 [9]
end of main function
http://en.cppreference.com/w/cpp/thread/thread/join –
@JanHudec、なぜ私の 'main.cpp'ではスレッドがブロックされていないのですか? – ar2015
@TheodorosChatzigiannakis、最初の例では現在のスレッドがどのように結合されていますか?現在のスレッドと同じ 'server_thread'ですか? – ar2015