【发布时间】:2017-11-07 15:22:47
【问题描述】:
所以我正在尝试在 C++ 中做一些多线程,我正在尝试使用 std::thread。我可以在互联网上找到的所有示例都使用 main 方法。但是我想在类构造函数中创建一个线程,并在析构函数中加入线程,然后清理线程。我已经尝试了几件这样的事情:
.cpp:
#inlcude "iostream"
myClass::myClass()
{
myThread= new std::thread(threadStartup, 0);
}
myClass::~myClass()
{
myThread->join();
delete myThread;
}
void threadStartup(int threadid)
{
std::cout << "Thread ID: " << threadid << std::endl;
}
.h
#pragma once
#include "thread"
class myClass
{
public:
myClass();
~myClass();
private:
std::thread* myThread;
};
这给了我以下错误错误:C2065: 'threadStartup': undeclared identifier。我也尝试将线程启动方法添加到类中,但这给了我更多错误。
我想不通,任何帮助将不胜感激。
编辑:std::thread 已更改为 std::thread*,就像在我的代码中一样。
如果我将 threadStartup 的函数声明移动到文件顶部,我会收到错误消息:
Severity Code Description Project File Line Suppression State
Error C2672 'std::invoke': no matching overloaded function found
和
Severity Code Description Project File Line Suppression State
Error C2893 Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...) noexcept(<expr>)'
【问题讨论】:
-
要么在
myClass::myClass()之前插入threadStartup()的原型,要么只是将整个函数向上移动。 -
刚刚尝试过,给了我更多错误,如我的编辑中所述:(。感谢您的快速回复。
-
如果您希望
threadStartup成为该类的一部分,请将其设为static,否则,只需修复@Scheff 提到的声明顺序即可。如果在那之后您遇到其他错误,请更新您的问题 - 它们可能与您发布的 sn-p 无关。
标签: c++ multithreading class stdthread