但是现在主线程由于WaitForMultipleObjects函数应该被阻塞
解决方案 »
- 请教MapX中关于图元叠加的问题
- 上海涵城数码诚聘英才 OOA/OOD TCP/IP atl/wtc WinCE C++ J2ME
- MessageBox面临的UNICODE问题?
- 用了一个很屎的虚拟光驱程序
- 关于取类中成员函数或变量的方式问题
- 界面高手请进
- 关于菜单的Enable问题
- 为什么在Win2000Server系统下编的用Raw Socket多线程发Ping命令的程序运行良好,在NT4.0下却不行?
- 菜鸟级问题,怎样将被浏览的文件夹的路径放入到Static控件中?详细点!
- WPARAM MainLoop()是什么意思
- 哪位高手指点一下,VC++线程之间的通信和同步程序?
- 请给我出视 两个例子: 同步 socket 和异步 socket 的代码,API的,不要那几个sock类的
谢谢各位兄弟,我马上试一试,等我回来加分
这样就可以了:
ULONG _stdcall MyProc(LPVOID pParam)
{
int i=(int)pParam;
while (i==1){Sleep(2);};
CString temp;
temp.Format("%d",i);
MessageBox(0,temp,"",MB_OK);
return 1;
}void CAsynThreadDlg::OnTest()
{
// TODO: Add your control notification handler code here
HANDLE test[4];
for (int i=0;i<4;i++)
test[i]=CreateThread(NULL,0,MyProc,(LPVOID)i,0,NULL);
Sleep(1000);
SetLastError(0);
DWORD WaitRes=WaitForMultipleObjects(4,test,true,INFINITE);
DWORD Err=GetLastError();
CString s;
s.Format("%d",WaitRes);
AfxMessageBox(s);
}
偶不要分
UINT MyProc(LPVOID pParam)
{
int i=(int)pParam;
while (i==1);
CString temp;
temp.Format("%d",i);
AfxMessageBox(temp);
return 1;
}
void CTest::Main()
{
HANDLE test[4];
for (int i=0;i<4;i++)
test[i]=(AfxBeginThread(MyProc,(LPVOID)i))->m_hThread;
WaitForMultipleObjects(4,test,true,INFINITE);
AfxMessageBox("ok");
}
afxmessagebox要使用程序主窗口的句柄和消息流程,这时程序主线程已经进入WaitForMultipleObject的wait状态,没有响应,所以无法弹出。
win32的messagebox就没有这个问题
2.while(i==1);是线程控制一个很不好的代码风格,造成一个很“忙”的死循环,
改成这样:while(i==1){Sleep(1);} 以交出部分线程时间
虽然问题解决了,还是要谢谢你,可惜分都光了,下次再给你吧。