多线程关闭问题,急

weasea 2008-03-29 03:00:16
while (!m_threadList.IsEmpty())
{
CCollectThread* pThread = m_threadList.RemoveHead();
CloseHandle(pThread->m_hThread);
delete pThread;---出错

}
...全文
130 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
weasea 2008-04-02
因为线程类里添加了对其他view控件处理
所以关闭不掉
回复
liwei84516 2008-04-01
线程这块我不是很懂,不过我知道。要用delete,就应该会有一个new跟他对应吧!你只有delete,没有new。会不会是这个问题!!
回复
Conry 2008-04-01
CWinThread 是自动删除的,有一个m_bAutoDelete变量控制
回复
Eleven 2008-04-01
delete pThread;---出错
不是用new出来,就不能用delete了!
回复
hdqqq 2008-03-31
你可以用ExitThread试试关闭线程用,也可以用事件通知线程退出,然后再删除.
回复
adrian_yang84 2008-03-31
API函数
VOID ExitThread(
DWORD dwExitCode // exit code for this thread
);
关闭当前线程用的
回复
weasea 2008-03-31
我的主要问题是
如果线程在执行的话
关闭线程关不掉。

VERIFY(WaitForSingleObject(pThread->m_hThread, INFINITE) == WAIT_OBJECT_0);
这儿会无限等待
回复
weasea 2008-03-31
void CDataShowView::StartThread(int iComID)
{
CCollectThread* pThread;
pThread = new CCollectThread(iComID);

if (pThread == NULL)
return;

ASSERT_VALID(pThread);
pThread->m_pThreadParams = NULL;

// Create Thread in a suspended state so we can set the Priority
// before it starts getting away from us
if (!pThread->CreateThread(CREATE_SUSPENDED))
{
delete pThread;
return;
}

// since everything is successful, add the thread to our list
m_threadList.AddTail(pThread);

// If you want to make the sample more sprightly, set the thread priority here
// a little higher. It has been set at idle priority to keep from bogging down
// other apps that may also be running.
VERIFY(pThread->SetThreadPriority(THREAD_PRIORITY_IDLE));
// Now the thread can run wild
pThread->ResumeThread();

}
回复
skewin 2008-03-29
。。。。。。
CCollectThread* pThread = m_threadList.RemoveHead();
CloseHandle(pThread->m_hThread);
delete pThread;

delete跟new一起使用
CCollectThread* pThread = m_threadList.RemoveHead(); 并没有new,只是把m_threadList.RemoveHead()给了pThread
不用delete。
回复
cnzdgs 2008-03-29
我是说你add到m_threadList中的CCollectThread指针是不是new分配的,如果不是就不能delete。
回复
weasea 2008-03-29
msdn 的MtGDI程序我改用的
回复
weasea 2008-03-29
CTypedPtrList<CObList,CCollectThread*> m_threadList;


msdn 的MDI程序我改用的
原例
while (!m_threadList.IsEmpty())
{
CGDIThread* pThread = m_threadList.RemoveHead();
VERIFY(WaitForSingleObject(pThread->m_hThread, INFINITE) == WAIT_OBJECT_0);
delete pThread;
}
回复
cnzdgs 2008-03-29
m_threadList中的数据是从哪来的?如果不是new出来的就不能delete。
回复
相关推荐
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2008-03-29 03:00
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……