-2
啓動多個線程我有一個類下面的方法如何在C++
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++應用程序中運行不確定數量的線程。
'for each'對我來說看起來不像C++。 – 2015-04-05 15:32:27
@JoachimPileborg,我認爲這可能是MSVC的擴展之一。考慮到這是C++ 11,但不需要它。 – chris 2015-04-05 15:37:49
爲什麼選擇投票? – 2015-04-05 18:42:36