【发布时间】:2015-08-01 06:28:20
【问题描述】:
目前我启动我的线程并等待它完成:
void ClassA::StartTest() // btn click from GUI
{
ClassB classB;
std::vector<std::thread> threads;
for(int counter=0; counter<4; counter++)
{
threads.at(counter) = std::thread(&ClassB::ExecuteTest, classB);
// if I join the threads here -> no parallelism
}
// wait for threads to finish
for(auto it=threads.begin(); it!=threads.end(); it++)
it->join();
}
B 类
#include <mutex>
ClassB
{
public:
void ExecuteTest(); // thread function
private:
std::mutex m_mutex;
bool ExecuteOtherWork(std::string &value);
};
相关方法ExecuteTest()
void ClassB::ExecuteTest()
{
std::string tmp;
std::lock_guard<std::mutex> lock(m_mutex); // lock mutex
std::stringstream stream(pathToFile);
while(getline(stream, tmp, ',')) // read some comma sep stuff
{
if(!ExecuteOtherWork(tmp)) break;
}
}
一切正常,但我想要线程超时:假设 40 秒后线程必须退出那里工作并返回主线程。 我该怎么做?
谢谢!
【问题讨论】:
-
Getline 和它的流式处理不能很好地超时,并且杀死线程将使互斥锁保持锁定状态。有什么方法可以将终止消息写入流中?
标签: c++ c++11 visual-studio-2012 std stdthread