多线程关闭问题,急

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

}
...全文
181 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
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。

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧