运行中的线程对象被删除,线程还在运行

最近发现写的代码中,一个类A中存在一个线程成员对象B, 某个时刻,通过类A对象将线程对象B进行启动,然后类A的对象存放在一个容器中进行管理,容器在满足一定条件将类A的对象进行删除,但是并没有进行线程对象B的停止操作。

因此,在此处进行测试,看一下A对象被删除,线程是否还在运行。

经过测试发现,线程还是在运行中。。。。。

#include <thread>
#include <vector>
#include <functional>
#include <iostream>

class CThreadObj {
public:
    CThreadObj()
        : m_bIsRunning(false)
        , m_count(0)
       , m_pT(NULL)
    {
    };
    
    void StartThread()
    {
        m_bIsRunning = true;
        m_pT = new std::thread(std::bind(&CThreadObj::ProcessThread, this));
    };
    void StopThread()
    {
        m_bIsRunning = false;
    };

    void ProcessThread()
    {
        while (m_bIsRunning)
        {
            //std::this_thread::sleep_for(std::chrono::milliseconds(1));
            std::cout << "threadId: "<<std::this_thread::get_id() 
                << " current number:" << m_count++ << std::endl;
        }
    };

private:
    bool m_bIsRunning;
    unsigned int m_count;
    std::thread *m_pT;
};

int main()
{
    std::cout << "main threadID: " << std::this_thread::get_id() << std::endl;
    std::vector<std::shared_ptr<CThreadObj>> vecThreadObj;
    auto pObj = std::make_shared<CThreadObj>(); 
    pObj->StartThread();
    vecThreadObj.push_back(pObj);
    
    std::this_thread::sleep_for(std::chrono::seconds(10));

    vecThreadObj.erase(vecThreadObj.begin());

    std::cout << "Thread Obj is already erase in main thread." << std::endl;

    std::this_thread::sleep_for(std::chrono::seconds(30));

    return 0;

通过打印出来的ThreadId,通过输出的log, 或者工具ProcessThreadsView可以查看到,线程还在运行中。

当然如果进程结束了,就看不到线程了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值