一段很简短的代码:
listen(ListenSock,5);
for(int i=0;i<MAX;i++)
{
if(ClientSocks[i]!=INVALID_SOCKET)
{
continue;
}
else
{
ClientSocks[i]=accept(ListenSock,NULL,NULL);
if(ClientSocks[i]!=INVALID_SOCKET)
{
HANDLE handle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ClientRoutine,(LPVOID)ClientSocks[i],0,NULL);
//AfxMessageBox("");
//Sleep(1000);
}
}
}我自己建立的线程为什么不执行呢????
我把子线程的优先级该到了TIME_CRITICAL了,也不行。用Sleep(1000)也不行,但是加了AfxMessageBox("");就行了。请高手指点呀!!!
listen(ListenSock,5);
for(int i=0;i<MAX;i++)
{
if(ClientSocks[i]!=INVALID_SOCKET)
{
continue;
}
else
{
ClientSocks[i]=accept(ListenSock,NULL,NULL);
if(ClientSocks[i]!=INVALID_SOCKET)
{
HANDLE handle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ClientRoutine,(LPVOID)ClientSocks[i],0,NULL);
//AfxMessageBox("");
//Sleep(1000);
}
}
}我自己建立的线程为什么不执行呢????
我把子线程的优先级该到了TIME_CRITICAL了,也不行。用Sleep(1000)也不行,但是加了AfxMessageBox("");就行了。请高手指点呀!!!
解决方案 »
- Settimer,两个事件会同时触发吗?
- 正当天热时,又多了一个裤叉,挥汗散分...
- CListCtrl::GetItem的用法
- 在TREE VIEW控件中使用TreeView_DeleteAllItems的问题
- 编译Debug时又如下的警告,但是release时很好,请教各位高手!!!
- ★初来本版报到,请各位大虾介绍个数据库编程基础的例子~~~~~~~ 100散~
- 急问!如何打印ListCtrl 中的内容??
- 急事!!!!!!!!!!!!!!!!!!!!!!!!!!!!!找人做软件!有银子的哦!
- HOOK API中如何返回原来函数的地址?
- 给一个思路
- 编写了一个.def文件,却没有生成导出函数,修改LIBRARY 后的关键字,生成的DLL文件名没有改变
- UPDATE_COMMAND_UI消息的响应函数的用法??
看下CreateThread的返回值是什么?
MFC 的CSocket 不能用多线程
我刚刚吃亏了
如果一定要用多线程的话
只有自己用API来写
因为CSocket自己就是多线程和消息循环来实现非阻塞的~~~大概是这样吧
具体我不是很清楚~~
{
AfxMessageBox("x");}为了简化问题,我把子线程的核心代码删了,留下一个对话框语句来测试子线程的运行。结果就如我前面的问题中的情况一样。
HANDLE handle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)ClientRoutine,(LPVOID)ClientSocks[i],0, &dwThreadID); if (handle)
{
// successed
}
我是说在createthread后面加了对话框语句后我创建的子线程就可以运行了
不加对话框语句子线程就不运行了。如源代码所示而且经过测试我的线程创建成功了,我可以保证
直接设置个断点调试下可不可以进入。
LPVOID lpParameter // thread data
);
线程函数是这样的吧
用了MessageBox让程序阻塞掉,使得Accept结束,有充分的时间去产生线程
DWORD WINAPI ThreadProc(
LPVOID lpParameter // thread data
);
不知道是不是这个问题
然后wsawaitformultipleevents,在子线程中用setevent的方法进行了同步,可是都不行呀。
是不是最好不要在主线程中阻塞呢
急死我了!!大侠救命!!!