我在stackoverflow上看到了一些想法从类中启动线程。
我的功能 - 必须运行此功能
//header.h
private:
void updateTime();
//cpp
void class::updateTime(){
while (true){
Sleep(1000);
}
}
从我的类构造函数(这是QT类构造函数)
我试着用它:
std::thread t1{&class::updateTime,this};
或者是lambda风格
std::thread t1{ [this] { updateTime(); } };
但我仍然有错误
我认为方法应该有效; 0调试器返回:
答案 0 :(得分:1)
根据评论中的描述,听起来你希望你的课程有点像这样:
struct foo
{
void updateTimer()
{
while(running_) {
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "Hello" << std::endl;
}
}
std::atomic_bool running_{true};
std::thread t_{&foo::updateTimer, this};
~foo()
{
running_ = false;
t_.join();
std::cout << "Thread stopped\n";
}
};
上面的类在构造时启动一个线程,每秒打印Hello
一次,直到它被发出停止信号。此信令由~foo()
完成,这是必要的,因为没有它,destructor for t
将在joinable
时执行。这将导致std::terminate
被调用。可加入的std::thread
必须是join
或detach
,以防止这种情况发生。
此处使用上述课程的an example。