【问题标题】:Pointers to threads指向线程的指针
【发布时间】:2010-05-13 05:07:45
【问题描述】:

假设我有指向这样一个线程的指针

CWinThread *m_pThread = AfxBeginThread(StartThread, this, THREAD_PRIORITY_NORMAL, 0, 0);

现在在我的 StartThread 函数中假设我执行了所有操作并且函数返回如下

UINT CClassThread::StartThread(LPVOID pVoid)
{
     return true;
}

return语句执行时我的m_pThread会失效吗?

【问题讨论】:

    标签: c++ multithreading mfc


    【解决方案1】:

    是的,它将是无效的,因为它将在线程结束时被删除。但是,如果将CWinThread::m_bAutoDelete 设置为FALSE,则不会删除CWinThread*。我刚刚搜索了答案并在这里找到了它:http://msdn.microsoft.com/en-us/library/48xz4yz9(VS.80).aspx

    顺便说一句,如果您使用的是 pthreads(Unix 线程),答案是否定的。当一个线程终止时,它的句柄保持有效,直到你调用pthread_join(等待线程完成,释放它,并获取它的返回值)或pthread_detach(告诉一个线程在它完成时释放它自己)。

    【讨论】:

    • 好的,如果无效,它会是 NULL 还是一些无效的数据。
    • 这将是一个野指针(无效)。当它们变得无效时,C++ 不会寻找你的指针并将它们 NULL :-)
    • m_pThread 将保留它的值,即使它指向的对象已被释放。它将成为dangling pointer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多