【发布时间】:2018-03-17 15:38:26
【问题描述】:
我有一个将文件从源复制到新位置的线程,并且我正在从一个类运行该线程并且已分离。线程正在运行并正常结束,但是当我使用不同的源和位置重新运行副本(不重新启动程序)时,线程按预期运行,但仍使用旧的源和位置。
我了解分离的线程在完成后会自动释放其所有资源,但在我的情况下不会。我使用std::move(vec) 将值传递给线程。 v 这里似乎在线程完成后没有释放。
谁能帮我进一步了解多线程。
std::vector <FILEEXTRACTPARAMS> vec; //class wide variable
.
.
.
bool CFileExtract::execute()
{
//initialization/re-initialization of 'vec' here
.
.
std::thread cp_th(©_thread, std::move(vec));
cp_th.detach();
.
.
}
.
.
.
void copy_thread(std::vector <FILEEXTRACTPARAMS> &&v)
{
for (size_t sz = 0; sz != v.size(); sz++)
{
.
//some tasks done here
.
}
}//end of thread
【问题讨论】:
-
bool CFileExtract::execute()你没有在这里传递任何参数,那么你如何重新初始化向量?还有什么返回 bool 应该确认? -
如何以及何时重新运行某个线程?我没有在代码中看到第二次运行。
-
@Olaf,整个任务再次运行。意思是,“vec”再次用新值重新填充,然后成员函数“bool CFileExtract::execute()”再次运行。
标签: c++ multithreading concurrency