【发布时间】:2020-07-06 18:09:26
【问题描述】:
这是违法的吗?如何使用private 隐藏这个全局线程实例?它似乎在没有 const 的情况下也能工作,但我仍然想 const 它只是为了安心。
struct AbstractImage {
private:
static void LoadImages();
static const std::thread ImageLoader;
};
...
const std::thread AbstractImage::ImageLoader( AbstractImage::LoadImages );
void AbstractImage::LoadImages() {
ImageLoader.detach();
}
'void std::thread::detach(void)': cannot convert 'this' pointer from 'const std::thread' to 'std::thread &'
【问题讨论】:
-
detach需要改变线程对象的状态。正如您从不是 const 方法的事实中看到的那样。所以不,你不能在 const 线程上分离。 “我仍然想为了安心而对其进行构造。”什么心安?如果你需要分离,你需要它是可变的。 -
我很乐意不分离它,否则它会在程序退出时弹出一个愚蠢的断言失败对话框。
-
为什么需要一个全局的
std::thread对象?为什么不在启动时调用一个函数,并让该函数使用它在退出之前分离的本地std::thread? -
回复。
"...it pops up a silly assert failed dialog at program exit",那是因为在调用它的析构函数之前,你(可能)不是 joining 它。 -
@RemyLebeau 我使用私有成员,以便它可以调用私有结构函数
标签: c++ static constants stdthread