如何在课堂上使用线程
How do I use threading in a class?
我正在尝试为我的OpenGL项目创建一个加载屏幕,并且已经阅读了这篇文章,为了使其正确工作,最好使用线程。我试图用我的线程调用我的函数,但我一直收到这些错误:
错误C2064:术语的计算结果不是采用3个参数的函数
IntelliSense:没有构造函数"std::thread::thread"的实例与参数列表匹配参数类型为:(void(Screen*newScreen,bool activeVisuals,bool active Controls),PlayScreen*,bool,bool)
这是我的代码:
//LoadingScreen
class LoadingScreen
{
LoadingScreen();
void LoadNewScreen(Screen* newScreen, bool activeVisuals, bool activeControls);
void Setup();
};
void LoadingScreen::LoadNewScreen(Screen* newScreen, bool activeVisuals, bool activeControls)
{
}
void LoadingScreen::Setup()
{
PlayScreen *playScreen = new PlayScreen();
std::thread first(LoadingScreen::LoadNewScreen,playScreen, true, true);// , playScreen, true, true);
first.join();
}
//source.cpp
LoadingScreen loadingScreen;
int main()
{
LoadingScreen loadingScreen = LoadingScreen();
loadingScreen.Setup();
return 0;
}
您需要传递一个附加参数,该参数是作为第一个参数传递其成员函数的类的实例。
std::thread first(&LoadingScreen::LoadNewScreen, this, playScreen, true, true);
// ^^^^ <= instance of LoadingScreen
需要额外的参数,因为这实际上就是所谓的LoadNewScreen
。
this->LoadNewScreen(playScreen, true, true);
您需要给std::thread(Function &&f, Args&&... args)
一个Lambda或一个函数指针。
更改
std::thread first(LoadingScreen::LoadNewScreen,playScreen, true, true);
至
std::thread first(&LoadingScreen::LoadNewScreen,playScreen, true, true);
如果您需要对this
指针的引用,也可以使用Lambda。
相关文章:
- 从不同线程使用int64的不同字节安全吗
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 在C++中使用cURL和多线程
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- 在cuda线程之间共享大量常量数据
- 如何将元素添加到数组的线程安全函数?
- 线程,如果else语句,都是错误的上下文切换后,会发生什么
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 异常属于C++中的线程还是进程
- C++中的线程安全删除
- C++使用params创建线程函数会导致转换错误
- 类与私有变量的其他类之间的线程安全性
- CoInitialize()在单独的线程上崩溃而不返回
- c++中的线程池
- 线程之间的布尔停止信号
- 为什么std::async使用同一个线程运行函数
- 用于矢量处理的多个线程
- C++为线程工作动态地分割例程
- 为什么我不能在 while 循环中创建线程?