c++ - ISO禁止启动自己类方法的线程?

标签 c++ multithreading

<分区>

为什么定义:

void aClass::start(){
    void *ptr = this->startService;
    thread serviceth(ptr,this);
}

ISO 禁止吗? 即使我:

void aClass::start(){
    thread serviceth(startService,this);
}

我收到一个错误:“没有匹配的调用函数”。

最佳答案

您需要为 std::thread 提供函数指针,例如

void aClass::start(){
    thread serviceth(&aClass::startService, this);
}

为了创建线程。但是,我们遇到了另一个问题。创建线程后,函数立即结束并销毁线程。由于线程处于可连接状态(join()detach() 从未被调用),线程的析构函数将抛出异常。

您可以使 serviceth 成为 aClass 的成员,以便线程可以在该类存在时运行。

关于c++ - ISO禁止启动自己类方法的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36482577/

相关文章:

c++ - 创建具有特定权限的线程c++

c# - 使用 C++ 和 WinCrypt 库进行 RSA 加密,使用 C# 进行解密

android - 长时间的应用正常运行后,ANR

java - android中的多线程服务器套接字从连接的客户端接收图像 - 不工作

c++ - 在 C++ 中检查空文件

C++ 这个类有什么问题?

c++ - 如何在应用程序中更改 Windows ANSI api 的 CP_ACP(0)?

java - 游戏期间在后台运行计数器线程

java - 我的 ExpirableLazyObject 不是线程安全的吗?有竞争条件吗?

c# - 可以将其当前计数减少 N(N>=1)的信号量?