WinSock的多线程编程课件.pptVIP

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

//利用入口參數作某些事情。這是工作線程要完成的主要工作。?return0;//線程成功地完成並返回。}(2)在程式的另一個函數中插入以下代碼。..............pNewObject=newCMyObject;AfxBeginThread(MyThreadProc,pNewObject);7.3.3創建並啟動用戶介面線程創建並啟動用戶介面線程一般要經過三個步驟:第一步是從CWinThread類派生出自己的線程類;第二步是改造這個線程類,使它能夠完成用戶所希望的工作;第三步是創建並啟動用戶介面線程。1.從CWinThread類派生出自己的線程類要創建一個MFC的用戶介面線程,所要做的第一件事就是從CWinThread類派生出自己的線程類,一般借助ClassWizard來做這項工作。2.改造自己的線程類對這個派生的線程類作以下改造工作:(1)在這個線程類的.h頭檔中,使用DECLARE_DYNCREATE宏來聲明這個類;在用戶線程類的.CPP實現檔中,使用IMPLEMENT_DYNCREATE宏來實現這個類。前者的調用格式是:DECLARE_DYNCREATE(class_name),WinSock的多線程編程WinSock需要多線程編程的原因,Win32操作系統下的多進程多線程機制、多線程機制在網路編程中的應用和VisualC++6.0對多線程網路編程的支持。進而分析了MFC支持的兩種線程,給出了創建MFC的工作線程、創建並啟動用戶介面線程和終止線程的步驟。7.1WinSock為什麼需要多線程編程7.1.1WinSock的兩種輸入輸出模式如前所述,WinSock在進行輸入輸出的時候,可以使用兩種工作模式。即“阻塞”模式(BlockingMode)或“非阻塞”模式,又稱為同步模式或非同步模式。工作在“阻塞”模式的套接字稱為阻塞套接字,工作在“非阻塞”模式下的套接字稱為非阻塞套接字。7.1.2兩種模式的優缺點及解決方法“阻塞”與“非阻塞”模式各有其優點和缺點。阻塞套接字的I/O操作工作情況比較確定,無非是調用、等待、返回。大部分情況下,I/O操作都能成功地完成,不過就是花費了等待的時間。因而比較容易使用,容易編程;但在應付諸如需要建立多個套接字連接來為多個客戶服務的時候,或在數據的收發量不均勻的時候,或在輸入輸出的時間不確定的時候,卻顯得性能低下,甚至無能為力。使用非阻塞套接字,需要編寫更多的代碼,因為必須恰當地把握調用I/O函數的時機,儘量減少無功而返的調用,還必須詳加分析每個Winsock調用中收到的WSAEWOULDBLOCK錯誤,採取相應的對策,這種I/O操作的隨機性使得非阻塞套接字顯得難於操作。?所以,我們必須採取一些適當的對策,克服這兩種模式的缺點,讓阻塞和非阻塞套接字能夠滿足各種場合的要求。對於非阻塞的套接字工作模式,進一步引入了五種“套接字I/O模型”,在第8章詳細說明。對於阻塞的套接字工作模式,則進一步引入了多線程機制。7.2Win32操作系統下的多進程多線程機制7.2.1Win32OS是單用戶多任務的操作系統最早的DOS是單用戶單任務的。後來發展到圖形介面的Windows,發展到Windows95,Windows98,就都支持多任務了,從WindowsNT起,Windows操作系統更是發展成了一個真正的搶佔式多任務操作系統。7.2.2Win32OS是支持多線程的操作系統Win32操作系統還支持同一進程的多線程。在一個Windows進程內,可以包含多個線程。一個線程(thread)是進程內的一條執行路徑,具體地說,是一個應用程式中的一條可執行路徑,往往是應用程式中的一個或多個函數。一個進程中至少要有一個線程,習慣將它稱為主線程。任何一個應用程式進程都有一個主線程。一般C程式中的Main或WinMain函數就規定了主線程的執行代碼。當你啟動了一個應用程式時,操作系統在為它創建了進程之後,也創建了該進程的主線程,並根據Main或WinMain函數的地址,開始執行該進程的主線程。主線程可以創建並啟動其他輔助線程,由主線程創建的線程又可以創建並啟動更多的線程。一個線程也需要佔用一定的系統資源,線程是進程中相對獨立的執行單位,也是Win32操作系統中可調度的最小的執行單位。多個進程中的多個線程併發地執行。對於擁有多個處理機的電腦系統,調度程式可以將不同的線程安排到不同的處理機上去運行,一方面平衡了CPU的負載,另一方面也提高了系統的運行效率。當某個線程的代碼都執行完畢時,該線程

文档评论(0)

爱遛弯的张先生 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档