不要再没有响应!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! panda_w: 源代码发到[email protected]了!!!!!!!!!!! 快帮我看看!!!!!!!!!!!!!!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 [email protected]收到没有?收到请回答! WaitForMultipleObjects(iThread,hThread,TRUE,INFINITE);第三个参数是BOOL fWaitAll=TRUE,所有线程都终止,是你希望的么?hThread[i]=CreateThread(NULL,0,PortScan,(LPVOID)&theport[i],0,&dwThreadID); 最后一个参数,&dwThreadID, 用于所有线程, 会不会有问题? 是否也可以用一个数组? seedundersnow:WaitForMultipleObjects等所有的线程都终止是我所希望的。我想先在端口全部扫描完毕之后进行其他的工作。dwThreadID我改过为数组,结果跟目前一样。我甚至把hThread[i]=CreateThread(NULL,0,PortScan,(LPVOID)&theport[i],0,&dwThreadID[i]); 改成CWinThread CThread[100];CThread[i]=AfxBeginThread(PortScan,(LPVOID)&theport[j]);hThread[i]=CThread[i]->m_hThread;.....结果,还是程序失去响应。 如果线程函数中发生阻塞. 而你在外面一个劲的傻等. 那最后的结果就是失去响应... 判断是不是这种情况. 把waitformultipleobject的最后一个参数改为10000或者一个非无穷的值, 如果这时候程序不失去响应, 就证明是发生阻塞了. (应该是的, 因为没有其它的地方会发生等待或者是无限循环等). 或者把线程函数中的网络相关的语句注释掉, 不失去响应也能证明. 你的主线程不能无限的放权给子线程想什么时候结束就什么时候结束. 就等一段时间, 不行就强行关闭了它, 按端口不开放处理. 再不行就TerminateThread. 不知道这个时候的socket会如何被处理! 如果的子线程中没有阻塞或者改为非阻塞的方式. 可以在主线程中放一个信号hEventKill来通知子线程结束. 子线程的每一个循环都用if(WaitForSingleObject(hEventKill, 0) == WAIT_TIMEOUT) break; ... 这样的语句检查一下是不是让结束了. 主线程中当开完10个子线程之后用WaitForMultipleObjects( ... all ...) 等一段时间. 之后SetEvent(hEventKill). 之后再用waitformultipleobjects等一段时间. 之后没有关闭的用closehandle关闭. 继续下全个循环... vector<结构体>::iterator 初始化问题 VC里面嵌入汇编,能支持16位形式的设置中断/响应中断么? 求:如何将绝对路径转换为相对路径,高分,急急急!! 多线程环境下磁盘读取如何最大的提升吞吐率? 录制PPLive的播放内容 界面显示问题(有一点难度的问题) 我有一个Word文件.doc,现在我不打开Word,想把这个文件打印出来,可以吗? vc++中如何用对话框调用对话框 Platform SDK 中一些参数的define找不到 位操作? windows剪贴板内容变化时会不会发出消息呢。 谁能找到类似VB窗口编辑器的VC源代码,高分送上
WaitForMultipleObjects(iThread,hThread,TRUE,INFINITE);
第三个参数是BOOL fWaitAll=TRUE,所有线程都终止,是你希望的么?hThread[i]=CreateThread(NULL,0,PortScan,(LPVOID)&theport[i],0,&dwThreadID);
最后一个参数,&dwThreadID, 用于所有线程, 会不会有问题? 是否也可以用一个数组?
WaitForMultipleObjects等所有的线程都终止是我所希望的。
我想先在端口全部扫描完毕之后进行其他的工作。
dwThreadID我改过为数组,结果跟目前一样。
我甚至把hThread[i]=CreateThread(NULL,0,PortScan,(LPVOID)&theport[i],0,&dwThreadID[i]); 改成CWinThread CThread[100];
CThread[i]=AfxBeginThread(PortScan,(LPVOID)&theport[j]);
hThread[i]=CThread[i]->m_hThread;
.....结果,还是程序失去响应。
判断是不是这种情况. 把waitformultipleobject的最后一个参数改为10000或者一个非无穷的值, 如果这时候程序不失去响应, 就证明是发生阻塞了. (应该是的, 因为没有其它的地方会发生等待或者是无限循环等). 或者把线程函数中的网络相关的语句注释掉, 不失去响应也能证明. 你的主线程不能无限的放权给子线程想什么时候结束就什么时候结束. 就等一段时间, 不行就强行关闭了它, 按端口不开放处理. 再不行就TerminateThread. 不知道这个时候的socket会如何被处理!