绯路 2014-11-05 11:39 采纳率: 50%
浏览 2805

临界区 使用sleep后程序崩溃

m_list1,m_list2,是映射的两个listbox的控件变量,在sleep后崩溃,刚开始以为时间设置小了,调整到1000,还是崩溃,敬请各位大牛指点小弟。。。。。。
代码如下:
int nTiecks =30;
HANDLE hthread1,hthread2;
CRITICAL_SECTION cs;

DWORD WINAPI Threadproc1(LPVOID p)
{
CThread2Dlg pDlg = (CThread2Dlg) p;
while(1)
{
EnterCriticalSection(&cs);

    if (nTiecks > 0)
    {

        CString str;
        str.Format("%d",nTiecks);
        pDlg->m_list1.AddString(str);
        nTiecks--;
        LeaveCriticalSection(&cs);
    }
    else
    {
        LeaveCriticalSection(&cs);
        break;
    }

}
return 0;

}
DWORD WINAPI Threadproc2(LPVOID p)
{
CThread2Dlg *pDlg = (CThread2Dlg *)p;
while(1)
{
EnterCriticalSection(&cs);

    if (nTiecks > 0)
    {
        CString str;
        str.Format("%d",nTiecks);
        pDlg->m_list2.AddString(str);
        nTiecks--;
        LeaveCriticalSection(&cs);
    }
    else
    {
        LeaveCriticalSection(&cs);
        break;
    }

}
return 0;

}
void CThread2Dlg::OnButton1()
{
// TODO: Add your control notification handler code here

nTiecks = 30;
m_list1.ResetContent();
m_list2.ResetContent(); 
    InitializeCriticalSection(&cs);

hthread1 = CreateThread(NULL,0,Threadproc1,this,0,NULL);
hthread2 = CreateThread(NULL,0,Threadproc2,this,0,NULL);
CloseHandle(hthread1);
CloseHandle(hthread2);

Sleep(1000);
::DeleteCriticalSection(&cs);

}

  • 写回答

1条回答

  • zh852 2016-12-02 06:20
    关注

    你跟踪下两个线程是否跑完了,别用sleep 用waitformultiobject,等两个线程退出了再deletecriticalsection

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况