目前我开始我的线程并等待它完成:
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();
}
ClassB的
#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秒后线程必须退出那里工作并返回主线程。 我怎么能这样做?
THX!
答案 0 :(得分:0)
在while循环中添加一个超时检查:
std::chrono::time_point<std::chrono::steady_clock> start(std::chrono::steady_clock::now());
std::chrono::seconds timeout(timeoutinSec);
while(getline(stream, tmp, ',') && std::chrono::steady_clock::now() - start < timeout) // read some comma sep stuff
{
if(!ExecuteOtherWork(tmp)) break;
}
如果ExecuteOtherWork()是一个快速操作,那么你可以检查循环每执行X次的时间。