| 发表于:2007-07-14 23:21:55 楼主 |
void cdiy_mfc_multithreadingdlg::onset() { cwinthread *threags[6]; // todo: add your control notification handler code here threags[0]=afxbeginthread(threadno1,(lpvoid)(&pparam)); threags[1]=afxbeginthread(threadno2,(lpvoid)(&pparam)); threags[2]=afxbeginthread(threadno3,(lpvoid)(&pparam)); threags[3]=afxbeginthread(threadno4,(lpvoid)(&pparam)); threags[4]=afxbeginthread(threadno5,(lpvoid)(&pparam)); threags[5]=afxbeginthread(threadno6,(lpvoid)(&pparam)); for (int i=0;;i++) { if (pparam.m_terminate==true) { m_result=pparam.m_result; m_threadid=pparam.threadid; updatedata(false); break; } } } uint cdiy_mfc_multithreadingdlg::threadno1(lpvoid pparam) { srand( (unsigned)time( null ) ); pparam* pp=(pparam*)pparam;//必须这样过度! csinglelock singlelock(&(pp-> m_section));//section也不例外!!!!!! for (int i=0;;i++) { if (pp-> m_terminate==false) { //singlelock.lock(); if ((pp-> m_result=rand())> 25000) { pp-> m_terminate=true; //pp-> m_threadid= "线程胜利! " pp-> threadid=1; break; } //singlelock.unlock(); } else { break; } } return 0; } uint cdiy_mfc_multithreadingdlg::threadno2(lpvoid pparam) { srand( (unsigned)time( null ) ); pparam* pp=(pparam*)pparam;//必须这样过度! csinglelock singlelock(&(pp-> m_section));//section也不例外!!!!!! for (int i=0;;i++) { //singlelock.lock(); if (pp-> m_terminate==false) { if ((pp-> m_result=rand())> 25000) { pp-> m_terminate=true; pp-> threadid=2; break; } } else { break; } //singlelock.unlock(); } return 0; } uint cdiy_mfc_multithreadingdlg::threadno3(lpvoid pparam) { srand( (unsigned)time( null ) ); pparam* pp=(pparam*)pparam;//必须这样过度! csinglelock singlelock(&(pp-> m_section));//section也不例外!!!!!! for (int i=0;;i++) { //singlelock.lock(); if (pp-> m_terminate==false) { if ((pp-> m_result=rand())==25000) { pp-> m_terminate=true; pp-> threadid=3; break; } } else { break; } //singlelock.unlock(); } return 0; } uint cdiy_mfc_multithreadingdlg::threadno4(lpvoid pparam) { srand( (unsigned)time( null ) ); pparam* pp=(pparam*)pparam;//必须这样过度! csinglelock singlelock(&(pp-> m_section));//section也不例外!!!!!! for (int i=0;;i++) { if (pp-> m_terminate==false) { //singlelock.lock(); if ((pp-> m_result=rand())> 25000) { pp-> m_terminate=true; pp-> threadid=4; break; } //singlelock.unlock(); } else { break; } } return 0; } uint cdiy_mfc_multithreadingdlg::threadno5(lpvoid pparam) { srand( (unsigned)time( null ) ); pparam* pp=(pparam*)pparam;//必须这样过度! csinglelock singlelock(&(pp-> m_section));//section也不例外!!!!!! for (int i=0;;i++) { //singlelock.lock(); if (pp-> m_terminate==false) { if ((pp-> m_result=rand())> 25000) { pp-> m_terminate=true; pp-> threadid=5; break; } } else { break; } //singlelock.unlock(); } return 0; } uint cdiy_mfc_multithreadingdlg::threadno6(lpvoid pparam) { srand( (unsigned)time( null ) ); pparam* pp=(pparam*)pparam;//必须这样过度! csinglelock singlelock(&(pp-> m_section));//section也不例外!!!!!! for (int i=0;;i++) { //singlelock.lock(); if (pp-> m_terminate==false) { if ((pp-> m_result=rand())> 25000) { pp-> m_terminate=true; pp-> threadid=6; break; } } else { break; } //singlelock.unlock(); } return 0; } 为什么不能执行多线程? 我还发现threags[0]=afxbeginthread(threadno1,(lpvoid)(&pparam)); threags[1]=afxbeginthread(threadno2,(lpvoid)(&pparam)); threags[2]=afxbeginthread(threadno3,(lpvoid)(&pparam)); threags[3]=afxbeginthread(threadno4,(lpvoid)(&pparam)); threags[4]=afxbeginthread(threadno5,(lpvoid)(&pparam)); threags[5]=afxbeginthread(threadno6,(lpvoid)(&pparam)); 先写哪个号就出哪个!达不到比较的目的!! |
|
|
|
|