C++ init作为构造函数内部成员变量的线程

C++ init作为构造函数内部成员变量的线程,c++,multithreading,constructor,C++,Multithreading,Constructor,我正在尝试编写一个ResourceCach,它应该有一个线程来加载和卸载不同类型的对象。我一开始的想法是使用一个线程作为成员变量,并使用一个列表,其中包含std::strings,表示要加载/卸载的文件的路径。因此,还有一个名为work()的方法,应该由线程执行。但是好好谈谈 问题是: 如何在构造函数内部初始化线程? h 我们讨论的是std::thread。那我该怎么做呢?这是一个很好的“方式”开始吗?您只需在初始化器列表中以通常的方式初始化它: ResourceCach::ResourceCa

我正在尝试编写一个ResourceCach,它应该有一个线程来加载和卸载不同类型的对象。我一开始的想法是使用一个线程作为成员变量,并使用一个列表,其中包含
std::string
s,表示要加载/卸载的文件的路径。因此,还有一个名为work()的方法,应该由线程执行。但是好好谈谈

问题是: 如何在构造函数内部初始化线程?

h


我们讨论的是
std::thread
。那我该怎么做呢?这是一个很好的“方式”开始吗?

您只需在初始化器列表中以通常的方式初始化它:

ResourceCach::ResourceCach() : m_worker([this]{work();}) {}
尽管如此,如果您这样做,您应该最后声明它,以确保在线程可以访问它们之前初始化所有其他成员变量

如果要延迟,请将其保留为默认初始化状态,稍后再将另一个线程移动到该线程:

m_worker = std::thread([this]{work();});

注意:我假设它是
std::thread
,尽管您试图调用的构造函数看起来不是标准的。如果是非标准螺纹类型,则此答案可能不适用。

您只需在初始化器列表中以常规方式初始化即可:

ResourceCach::ResourceCach() : m_worker([this]{work();}) {}
尽管如此,如果您这样做,您应该最后声明它,以确保在线程可以访问它们之前初始化所有其他成员变量

如果要延迟,请将其保留为默认初始化状态,稍后再将另一个线程移动到该线程:

m_worker = std::thread([this]{work();});

注意:我假设它是
std::thread
,尽管您试图调用的构造函数看起来不是标准的。如果是非标准螺纹类型,则此答案可能不适用。

您只需在初始化器列表中以常规方式初始化即可:

ResourceCach::ResourceCach() : m_worker([this]{work();}) {}
尽管如此,如果您这样做,您应该最后声明它,以确保在线程可以访问它们之前初始化所有其他成员变量

如果要延迟,请将其保留为默认初始化状态,稍后再将另一个线程移动到该线程:

m_worker = std::thread([this]{work();});

注意:我假设它是
std::thread
,尽管您试图调用的构造函数看起来不是标准的。如果是非标准螺纹类型,则此答案可能不适用。

您只需在初始化器列表中以常规方式初始化即可:

ResourceCach::ResourceCach() : m_worker([this]{work();}) {}
尽管如此,如果您这样做,您应该最后声明它,以确保在线程可以访问它们之前初始化所有其他成员变量

如果要延迟,请将其保留为默认初始化状态,稍后再将另一个线程移动到该线程:

m_worker = std::thread([this]{work();});

注意:我假设它是
std::thread
,尽管您试图调用的构造函数看起来不是标准的。如果它是一些非标准线程类型,那么这个答案可能不适用。

所以我可以将其放入init中,应该可以。如果我用.join()停止线程,我就可以调用init agian并生成好吗
(m_worker=std::thread([this]{work();},“ResourceCach”);)
你说得对,它是std::thread。我只是在网上找到了类似的东西,但没有得到它working@BennX:是的,将其放入
init
,然后(加入后)再次这样做以获得重生应该没问题。非常感谢。这就是我要找的。希望ResourceCach的方法应该是好的。我没有考虑过lambda init,所以我可以把它放到init中,应该没问题。如果我用.join()停止线程,我就可以调用init agian并生成好吗
(m_worker=std::thread([this]{work();},“ResourceCach”);)
你说得对,它是std::thread。我只是在网上找到了类似的东西,但没有得到它working@BennX:是的,将其放入
init
,然后(加入后)再次这样做以获得重生应该没问题。非常感谢。这就是我要找的。希望ResourceCach的方法应该是好的。我没有考虑过lambda init,所以我可以把它放到init中,应该没问题。如果我用.join()停止线程,我就可以调用init agian并生成好吗
(m_worker=std::thread([this]{work();},“ResourceCach”);)
你说得对,它是std::thread。我只是在网上找到了类似的东西,但没有得到它working@BennX:是的,将其放入
init
,然后(加入后)再次这样做以获得重生应该没问题。非常感谢。这就是我要找的。希望ResourceCach的方法应该是好的。我没有考虑过lambda init,所以我可以把它放到init中,应该没问题。如果我用.join()停止线程,我就可以调用init agian并生成好吗
(m_worker=std::thread([this]{work();},“ResourceCach”);)
你说得对,它是std::thread。我只是在网上找到了类似的东西,但没有得到它working@BennX:是的,将其放入
init
,然后(加入后)再次这样做以获得重生应该没问题。非常感谢。这就是我要找的。希望ResourceCach的方法应该是好的。不知怎的,我没有想到lambda init