クラスに次のメソッドがあります
void Listener::Start()
{
Logger logger;
std::string logMessage("Starting '" + to_utf8string(GetName()) + "' Listener");
http_listener httpListener(GetUri());
std::string listenerName(to_utf8string(name));
logger.log(logMessage);
// listener recieves a GET request.
httpListener.support(methods::GET, [listenerName](http_request request)
{
Logger logger;
std::string logMessage("GET request recieved from " + listenerName);
logger.log(logMessage);
// dummy line just till routing is dealt with
request.reply(status_codes::OK, logMessage);
});
// open listener and route request
httpListener
.open()
.then([&httpListener,listenerName](){
Logger logger;
std::string logMessage(listenerName + "started");
logger.log(logMessage);
}).wait();
// JUST WAIT - we do not want the application to stop
while (true);
}
現在、スレッドの数はわかりません。基本的には、データベース テーブルから読み取られたレコードの数です。
for each (Listener l in ls.Select(m.GetId()))
{
l.Start();
}
最初のスレッドのみが開始されて実行されます。これは、スレッドの実行を停止するのは永続的なループだけであるという点で論理的です。
ただし、この方法で実行された場合。
std::vector<thread> listener_threads;
for each (Listener l in ls.Select(m.GetId()))
{
listener_threads.push_back(thread{ &Listener::Start, &l });
}
どのスレッドも実行されていないようです - どのリスナーもリクエストに応答しません。
問題は、C++ アプリケーションで不確定な数のスレッドを実行するにはどうすればよいかということです。