小妹有线程问题请教各位大虾,我可是很崇拜线程高手的。 一个 Dialog based (MFC)工程做服务器。socket(tcp数据流)已经建好,假设一个客户端发请求包过来,就开一个线程(要求线程有两个不同的优先级),直到处理结束返回应答包,然后结束线程。请教各位大虾在线程建立方面提供思路(我以前没做过),当然越具体越好,最好说说用那些函数,我就是不知道用什么函数? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CreateThread() //创建WaitForSingleObjectEx() //等待结束ResumeThread() //唤醒SuspendThread() //挂起... 不是三言两语能说清楚的找本书看吧《windows高级编程指南(第三版)》 直接看《Windows网络编程技术》很多这样的例子。 创建线程最好不要用CreateThread,使用AfxBeginThread或_beginthread。如果客户端请求不频繁,主线程收到请求包后可以创建子线程并将请求信息地址以消息方式通知工作线程,否则就需要全局数据区和线程同步了。如果请求频繁,使用线程池可以减少临时创建线程的开销。 Windows网络编程技术 完成端口~ 喂,有没搞错?我是在请教问题,又不是在讨论年龄。liagl(小林) halibut(乡下人) eroswzg(黄毛儿) 是朋友,让我看书的也是朋友。客户端请求很频繁,几乎每时每刻都同时有10个以上请求。再研究研究。 10个不算多,使用重叠IO和完成端口都可以,看zhouyong0371(小周周) 推举的那本书。 在<windows2000变成技术内幕>中有CreateThread,AfxBeginThread,_beginthread,_beginthreadEx的用法和可能带来的问题,同时在线程的同步有很多种方法,这本树立同样有详细的阐述,并且有实力 当然我说的是最少的情况,一般情况都比这个多的多。最多是一千多个,平时也有几百个。《Windows网络编程技术》看名字我感觉是一本网络的书,我想问的是线程控制,以前做过网络,用Windows Sockets2,多连接用了链表和WSAAsyncSelect()。重叠IO和完成端口 我还没什么印象,等会找这本书看看。 我现在最想了解的是怎么开线程和控制它,看来只有自己看书了。5555555555 为什么MM的问题这么多人回答? :(gz 最好使用完整端口来做,这样可以得到最大的效率。如果针对每一个socket请求都起一个先称那么服务器会累倒的。去查查完整端口的资料,网上应该有源代码。 有例子最好了,我最喜欢看例子了,这样速度快。rmichael(西边的云彩)你有吗?jyojyo(像海鸥一样飞翔)说的用处大。 MM,我喜欢~能不能留个地址啊,改天我上门和你详谈 :-p 急死了,我的CreateMutex的bInitialOwner参数不管为TRUE,还是FALSE,都没阻塞。(理论上为TRUE时阻塞)??????HANDLE mtxPrint;mtxPrint = CreateMutex(NULL, TRUE, "PrintMutex");WaitForSingleObject(mtxPrint, INFINITE); CreateMutex 建立互斥事件,应该用if( GetLastError() == ERROR_ALREADY_EXISTS){ AfxMessageBox("程序已经运行了"); return;} Accept接受后就创建一个新线程,这个线程可以设置低一级,然后把这个SOCK教给这个线程处理就可以了。 类似做个IIS吧?这个例子很多,如果想获得最大效率就一定要针对每个client建立thread你这种需求可以用阻塞式的网络传输,不是很复杂 fantiyu(fantiyu) ,"如果想获得最大效率就一定要针对每个client建立thread"你疯了吗?这样有效率吗?cpu都被用来创建和销毁线程了。建议楼主研究一下线程池技术和io完成端口 看看 《WINDOWS网络编程技术》 里面的I/O完成端口吧,很适合你用 未处理的异常,读取位置 0x0180a7e6 时发生访问冲突,却没有错误代码 制作启动画面出错 初学者的SelectObject()的问题? 一个困扰我好几天的问题啊 不知道大家有没有碰到 如何删除一个正在运行的EXE? 介绍一本好的vc++ studio 6.0的书 请教 谁有看见52694的问题,我第一次到这里,找不找他的鸟问题. 请问:写VC的单位多吗?VC程序员需求量大吗?写VC前景怎样呢?? 关于unicode问题 关于类的继承中重载CObject::Dump和CObject::AssertValid的问题
WaitForSingleObjectEx() //等待结束
ResumeThread() //唤醒
SuspendThread() //挂起...
找本书看吧
《windows高级编程指南(第三版)》
如果客户端请求不频繁,主线程收到请求包后可以创建子线程并将请求信息地址以消息方式通知工作线程,否则就需要全局数据区和线程同步了。
如果请求频繁,使用线程池可以减少临时创建线程的开销。
我是在请教问题,又不是在讨论年龄。
liagl(小林) halibut(乡下人) eroswzg(黄毛儿) 是朋友,让我看书的也是朋友。
客户端请求很频繁,几乎每时每刻都同时有10个以上请求。
再研究研究。
CreateThread,AfxBeginThread,_beginthread,_beginthreadEx的用法和可能带来的问题,
同时在线程的同步有很多种方法,这本树立同样有详细的阐述,并且有实力
最多是一千多个,平时也有几百个。
《Windows网络编程技术》看名字我感觉是一本网络的书,我想问的是线程控制,以前做过网络,用Windows Sockets2,多连接用了链表和WSAAsyncSelect()。重叠IO和完成端口 我还没什么印象,等会找这本书看看。 我现在最想了解的是怎么开线程和控制它,看来只有自己看书了。5555555555
jyojyo(像海鸥一样飞翔)说的用处大。
mtxPrint = CreateMutex(NULL, TRUE, "PrintMutex");
WaitForSingleObject(mtxPrint, INFINITE);
建立互斥事件,应该用
if( GetLastError() == ERROR_ALREADY_EXISTS)
{
AfxMessageBox("程序已经运行了");
return;
}
你疯了吗?这样有效率吗?cpu都被用来创建和销毁线程了。
建议楼主研究一下线程池技术和io完成端口