[英]Detach a static const std::thread?
这是非法的吗? 如何用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 &'
您不能在const std::thread
object 上调用detach()
,因为detach()
需要修改std::thread
的 state 。
在这种情况下,我建议根本不要使用 static std::thread
object。 特别是因为它是一次性使用的线程,所以一旦线程开始运行, std::thread
object 就不需要挂起。 在另一个 function 或 static 方法中使用本地std::thread
变量,然后您可以根据需要在启动时调用它,例如:
struct AbstractImage
{
private:
static void LoadImages();
struct LoadImagesStarter
{
LoadImagesStarter()
{
std::thread(AbstractImage::LoadImages).detach();
}
};
static const LoadImagesStarter ImageLoader;
};
...
const AbstractImage::LoadImagesStarter AbstractImage::ImageLoader;
void AbstractImage::LoadImages()
{
...
}
或者:
struct AbstractImage
{
private:
static void LoadImages();
friend void LoadImagesStarter();
};
//...
void AbstractImage::LoadImages()
{
...
}
__attribute__((constructor)) void LoadImagesStarter()
{
std::thread(AbstractImage::LoadImages).detach();
}
/* or, if your compiler supports this:
void LoadImagesStarter()
{
std::thread(AbstractImage::LoadImages).detach();
}
#pragma startup LoadImagesStarter 100
*/
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.