小编Bor*_*hem的帖子

在DTor之前删除静态对象创建的线程?

我的代码中有以下类.换句话说,有一个静态对象(单线程)在CTor中创建线程,当调用它的DTor时,它有一些工作要在这个线程的上下文中完成(DTor为线程放置一些工作).

我面临的问题是,当调用B的DTor时,在该进程中没有其他线程运行 - 看起来这个线程在调用类B的析构函数之前被进程清理杀死.

谁知道为什么会这样?以及如何避免它?

UPD:只有从DLL创建Singleton时才会出现问题.从同一个可执行文件创建Singleton时,一切正常.

我正在使用VS2017

  Singleton.dll (A.h + A.cpp)

A.h --> 

#pragma once
#include <thread>

class __declspec(dllexport) A
{
public:
    static A* instance();
    A();
    ~A();
private:
    bool stopFlag;
    std::thread mThread;
};

A.cpp

#include "stdafx.h"
#include <thread>
#include "A.h"

using namespace std;

    A::A()
    {
        mThread = std::thread([this] { while (stopFlag == false) {  } });
    }
    A::~A()
    {
        stopFlag = true;
        mThread.join();
    }

A* A::instance()
{
    static A self;
    return &self;
}
Run Code Online (Sandbox Code Playgroud)

================================================== ==============================
使用DLL main.cpp的可执行文件

#include "stdafx.h"
#include …
Run Code Online (Sandbox Code Playgroud)

c++ singleton multithreading destructor std

8
推荐指数
1
解决办法
213
查看次数

标签 统计

c++ ×1

destructor ×1

multithreading ×1

singleton ×1

std ×1