你好,最近我不得不开始开发一个多线程应用程序(第一次)并且遇到了这样一个问题:我迫切需要为特定对象创建一个线程,并将非静态函数名称传递给构造函数,谷歌没有给任何有价值的东西。
- 告诉我,这可能吗?
- 如果不是,它是如何“治疗”的?
在抽象中:有一个类,它有一个我必须通过初始化类构造函数中的指针来跟踪的System非静态方法。private update()private thread* Thread
PS 该update方法被调用move(...),它绑定到对象,即我不能在update不创建一个存储所有用户数据的容器的情况下将其设为静态,这很昂贵
#include <thread>
//еще включения ...
class System
{
//некоторые поля и методы...
//...
thread* Thread;
static thread* sThread;
System() {
Thread = new thread(update);//ошибка! отсутствуют экземпляры констуктора соответствующий ... для std::thread::thread (void())
}
void update() {
//...
move(...);
//...
}
void move() {
//работает с полями объекта
}
};
{
//где-то создается System* system = System;
}
PS(2)用c#爬的,这里可以用非静态方法(like)初始化线程,不要严格判断
也可以使用
std::bind文档说构造函数看起来像这样:
所以我可以假设你应该使用像这样的 lambda 函数:
无论如何,您应该注意对象的生命周期。
我不完全确定这是否是个好主意,但通过使用 lambda 代替
update并另外为编译器提供一个选项-pthread,我能够运行甚至获得以下代码的输出:我再说一遍,在我看来这一切都有很多陷阱,所以看到更多知识渊博的人的答案很有趣。
可以简单的为什么难?指定这是一个成员函数并添加
this?