日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

转:MFC中创建多线程

發(fā)布時間:2025/3/20 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 转:MFC中创建多线程 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MFC中創(chuàng)建多線程

  MFC的多線程函數(shù)必須聲明為靜態(tài)的或者是全局函數(shù)(不同的在于全局函數(shù)不能訪問類的私有靜態(tài)成員,而靜態(tài)類函數(shù)可以):但這樣的線程函數(shù)只能訪問靜態(tài)的成員變量,要實現(xiàn)訪問類的其他成員,可以這樣實現(xiàn):

1)全局函數(shù)。如 ? UINT ? MyThread(LPVOID ? p)?
2)類的靜態(tài)成員函數(shù)。如 ? static ? UINT ? MyView::MyThread(LPVOID ? p)?

  線程函數(shù)是可以帶參數(shù)的,比如??static?__stdcall??workthread(LPVOID?lpParam)你可以在創(chuàng)建這個線程的時候,把對象指針傳遞到lpParam,然后使用這個指針就可以在線程函數(shù)里調用非靜態(tài)成員變量和函數(shù)了。線程函數(shù)之所以必須是靜態(tài)函數(shù),是因為類的靜態(tài)函數(shù)不屬于該類的任何一個對象,它屬于類的本事,所以在運行時可以直接調用類的靜態(tài)函數(shù),從而啟動線程!

  注意:一定要是靜態(tài)的成員函數(shù),不然會提示error C2664: 'CreateThread' : cannot convert parameter 3 from 'unsigned long (void *)' to 'unsigned long (__cdecl *)(void *)

AfxBeginThread和CreateThread具體區(qū)別?

1.?具體說來,CreateThread這個 函數(shù)是windows提供給用戶的 API函數(shù),是SDK的標準形式,在使用的過程中要考慮到進程的同步與互斥的關系,進程間的同步互斥等一系列會導致操作系統(tǒng)死鎖的因素,用起來比較繁瑣一些,初學的人在用到的時候可能會產(chǎn)生不可預料的錯誤,建議多使用AfxBeginThread是編譯器對原來的CreateThread函數(shù)的封裝,用與MFC編程(當然,只要修改了項目屬性,console和win32項目都能調用)而_beginthread是C的運行庫函數(shù)。

在使用AfxBeginThread時,線程函數(shù)的定義為:UINT?? _yourThreadFun(LPVOID?? pParam)參數(shù)必須如此在使用CreateThread時,線程的函數(shù)定義為: DWORD WINAPI _yourThreadFun(LPVOID pParameter)

2.CreateThread:是Windows的API函數(shù),直截了當?shù)膭?chuàng)建了線程。 它沒有考慮:

1)C Runtime中需要對多線程進行紀錄和初始化,以保證C函數(shù)庫工作正常(典型的例子是strtok函數(shù))。

2)MFC也需要知道新線程的創(chuàng)建,也需要做一些初始化工作(當然,如果沒用MFC就沒事了)。_beginthreadex:MS對C Runtime庫的擴展函數(shù),首先針對C Runtime庫做了一些初始化的工作,以保證C Runtime庫工作正常。然后,調用CreateThread真正創(chuàng)建線程。AfxBeginThread:MFC中線程創(chuàng)建的函數(shù),首先創(chuàng)建了相應的CWinThread對象,然后調用CWinThread::CreateThread, 在CWinThread::CreateThread中,完成了對線程對象的初始化工作,然后,調用_beginthreadex創(chuàng)建線程。

如 果用MFC編程,不要用CreateThread,如果只是使用Runtime Library,用_BegingThread,總之,不要輕易使用CreateThread。這是因為在MFC和RTL中的函數(shù)有可能會用到些它們所封 裝的公用變量,也就是說AfxBeginThread和_BeginThread都有自己的啟動代碼是CreateThread所沒有的。在用 CreateThread所創(chuàng)建的線程中使用MFC的類和RTL函數(shù)就有可能出現(xiàn)問題。如果你是用匯編編寫win32程序并且在線程函數(shù)中也不調用MFC 和RTL的函數(shù),那用CreateThread就沒問題,或者你雖然是用C寫線程函數(shù),但你很小心沒調用RTL函數(shù)也不會有問題。

  CreateThread是由操作系統(tǒng)提供的接口,而AfxBeginThread和_BeginThread則是編譯器對它的封裝。

轉載于:https://www.cnblogs.com/yfz0/p/5832658.html

總結

以上是生活随笔為你收集整理的转:MFC中创建多线程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。