首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • 老问题希望大家解决,最好有代码.多线程 [无满意答案结贴,结贴人:hainanxu]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 08:49:23 楼主
    C/C++ code
    void CDomainG::OnTimer(UINT nIDEvent) { LPMYDEFSTRANDHANDLE lpMyDefStrAndHandle=new MYDEFSTRANDHANDLE; //分配 lpMyDefStrAndHandle->glTagMsg=new MyDefStr[DomainName_c]; //分配 lpMyDefStrAndHandle->phThreads=new HANDLE[DomainName_c]; //分配 // TODO: Add your message handler code here and/or call default CEdit *CEXECUTE_TIME=(CEdit*)GetDlgItem(IDC_EDIT_EXECUTE_TIME); CTime time=CTime::GetCurrentTime(); CEXECUTE_TIME->SetWindowText(time.Format("%Y-%m-%d %H:%M:%S")); if(theApp.m_CONDITIONS=="现在执行") { if(thDomain=="1"){ thDomain="0"; for(int i=0;i <DomainName_c;i++){ lpMyDefStrAndHandle->glTagMsg[i].pDlg=this; lpMyDefStrAndHandle->glTagMsg[i].DomainName_c_i=i; CWinThread* pThread =AfxBeginThread(MyThread,(LPVOID)&lpMyDefStrAndHandle->glTagMsg[i],THREAD_PRIORITY_IDLE); lpMyDefStrAndHandle->phThreads[i]=pThread->m_hThread; } AfxBeginThread(DoDeleteThread,(LPVOID)lpMyDefStrAndHandle,THREAD_PRIORITY_IDLE);//创建一个专门用来释放空间的线程 } else{ delete [] lpMyDefStrAndHandle->glTagMsg; //释放 delete [] lpMyDefStrAndHandle->phThreads; //释放 delete lpMyDefStrAndHandle; //释放 } }else{ if(thDomain=="1"&&time.Format("%H:%M:%S")>theApp.m_starttime&&time.Format("%H:%M:%S") <theApp.m_overtime){ for(int i=0;i<DomainName_c;i++){ lpMyDefStrAndHandle->glTagMsg[i].pDlg=this; lpMyDefStrAndHandle->glTagMsg[i].DomainName_c_i=i; CWinThread* pThread = AfxBeginThread(MyThread,(LPVOID)&lpMyDefStrAndHandle->glTagMsg[i],THREAD_PRIORITY_IDLE); lpMyDefStrAndHandle->phThreads[i]=pThread->m_hThread; } AfxBeginThread(DoDeleteThread,(LPVOID)lpMyDefStrAndHandle,THREAD_PRIORITY_IDLE); if(Domain_starti<DomainName_c){ Domain_starti=Domain_starti+10; }else{ Domain_starti=0; } if((Domain_starti+10)<DomainName_c){ Domain_endi=Domain_starti+10; }else{ Domain_endi=DomainName_c; } } else{ delete [] lpMyDefStrAndHandle->glTagMsg; delete [] lpMyDefStrAndHandle->phThreads; delete lpMyDefStrAndHandle; } } CDialog::OnTimer(nIDEvent); } UINT CDomainG::DoDeleteThread( LPVOID pParam) { LPMYDEFSTRANDHANDLE lpMyDefStrAndHandle=(LPMYDEFSTRANDHANDLE)pParam; WaitForMultipleObjects(lpMyDefStrAndHandle->glTagMsg->pDlg->DomainName_c,lpMyDefStrAndHandle->phThreads,true,INFINITE); //守候OnTimer中创建的所有线程结束 delete [] lpMyDefStrAndHandle->glTagMsg; delete [] lpMyDefStrAndHandle->phThreads; delete lpMyDefStrAndHandle; return 0; }


    DomainName_c  大到200时就出错了.好象是内存错误.请大家帮忙解决
    40  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 10:12:191楼 得分:0
    顶一下,代码的线索不是很清晰
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • cnzdgs
    • 等级:
    发表于:2008-05-07 10:41:432楼 得分:0
    WaitForMultipleObjects等待的句柄个数是有限制的,MSDN中有说明,XP系统最多是64个。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-07 11:07:443楼 得分:0
    运行时间长了还会 run  time error
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved