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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

MFC中创建和使用线程的方法

發布時間:2023/12/18 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC中创建和使用线程的方法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

有關創建線程的問題有三種方法:
1.C語言函數,調用_beginthread();
2.API函數,調用CreateThread();
3.MFC函數,調用AfxBeginThread();
推薦使用MFC函數AfxBeginThread();

利用MFC里的AfxBeginThread函數能很方便地創建線程以及對線程進行等待、喚醒等操作。

1、函數原型

CWinThread* AfxBeginThread( AFX_THREADPROC pfnThreadProc , LPVOID pParam , int nPriority = THREAD_PRIORITY_NORMAL , UINT nStackSize = 0 , DWORD dwCreateFlags = 0, LPSECURITY_ATTRIBUTES lpSecurityAttrs = NULL);

2、參數說明

(1)返回值:一個指向新線程的線程對象。

(2)pfnThreadProc:線程的入口函數,聲明一定要如下:UINT MyThreadFunction( LPVOID pParam );

(3)pParam:傳遞入線程的參數,注意它的類型為:LPVOID,所以我們可以傳遞一個結構體入線程。

(4)nPriority:線程的優先級,一般設置為 0。讓它和主線程具有共同的優先級。

(5)nStackSize:指定新創建的線程的棧的大小。如果為 0,新創建的線程具有和主線程一樣的大小的棧。

(6)dwCreateFlags:指定創建線程以后,線程有怎么樣的標志。可以指定兩個值:

<1>CREATE_SUSPENDED:線程創建以后,會處于掛起狀態,直到調用ResumeThread;<2>0:創建線程后就開始運行。
  • 1
  • 2
  • 3

(7)lpSecurityAttrs:指向一個 SECURITY_ATTRIBUTES 的結構體,用它來標志新創建線程的安全性。如果為 NULL,那么新創建的線程就具有和主線程一樣的安全性。

3、線程創建

一般創建過程如下:

先定義一個工作函數,一般來說你的線程就是依照該函數的功能執行任務:

UINT MyThreadFunction( LPVOID pParam )

{

//函數體return 0;
  • 1
  • 2
  • 3

}

然后可以按以下方式創建線程:

CWinThread* MyThread=AfxBeginThread(MyThreadFunction , pParam , THREAD_PRIORITY_NORMAL , 0 , 0 , NULL);

4、線程的等待與喚醒

(1)讓線程等待(暫時掛起):

MyThread->SuspendThread();

(2)喚醒暫停的線程:

MyThread->ResumeThread();

5、查看線程狀態:

DWORD code;

GetExitCodeThread(MyThread->m_hThread , &code);

if(code==STILL_ACTIVE){//線程仍在執行}

else {//線程停止執行}

6、結束線程

TerminateThread(MyThread->m_hThread , 0);

?

、、、、、、、、、、、

轉自:http://blog.csdn.net/richerg85/article/details/7438314

多線程的簡介

線程---操作系統調度的最小單位。線程包含在進程中,是進程中實際運行的單位。一個進程中可以同時運行多個線程,每個線程可以執行不同的任務,這就是所謂的多線程。同一進程中的多個線程將共享該進程中的全部系統資源,如虛擬地址空間、文件描述符和信號處理等,但是同一個進程中的多個線程都有各自的調用棧、寄存器環境和線程本地存儲。

?????? 對于單核(單CPU)系統來說,即便處理器一次只能運行一個線程,但是操作系統通過時間片輪轉技術,在不同的線程之間進行切換,讓用戶產生可以同時處理多個任務的錯覺,這樣的程序運行機制稱為軟件的多線程。

?????? 對于多核(多個CPU)系統來說,這樣的系統能同時進行真正的多線程多任務處理。這種運行機制可以稱為硬件的多線程技術。

?????? 多線程程序作為一種多任務、并發的工作方式,當然有以下的優點:
  1) 提高應用程序響應。這對圖形界面的程序尤其有意義,當一個操作耗時很長時,整個系統都會等待這個操作,此時程序不會響應鍵盤、鼠標、菜單的操作,而使用多線程技術,將耗時長的操作(time consuming)置于一個新的線程,可以避免這種尷尬的情況。
  2) 使多CPU系統更加有效。操作系統會保證當線程數不大于CPU數目時,不同的線程運行于不同的CPU上。
  3) 改善程序結構。一個既長又復雜的進程可以考慮分為多個線程,成為幾個獨立或半獨立的運行部分,這樣的程序會利于理解和修改。

多線程編程實例1

???????說明:本系列所有的實例都是在vc6.0下實現的,并且都是基于MFC AppWizard[exe]工程創建的“Dialog based”應用程序。

???????實例1,簡單的多線程,實現動態顯示時間

工程名稱為Mthread1,首先在Mthread1Dlg.h中聲明線程函數---void ThreadProc(),此函數為全局函數。

?????? 部分代碼如下:

// Mthread1Dlg.h : header file //... ...void ThreadProc();//線程函數聲明 class CMthread1Dlg : public CDialog {... ... protected:HICON m_hIcon;HANDLE hThread;//線程句柄... ...DECLARE_MESSAGE_MAP() };

MthreadDlg.cpp

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

// Mthread1Dlg.cpp : implementation file

//

?

/

// CAboutDlg dialog used for App About

volatile BOOL m_bRun;//代表線程是否正常運行

?

void ThreadProc() //線程函數

{

????CTime time;

????CString strTime;

????m_bRun = TRUE;

?

????while(m_bRun)

????{

????????time = CTime::GetCurrentTime();

????????strTime = time.Format("%H:%M:%S");

?

????????::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_TIME,strTime);

????????Sleep(1000);

????}

}

class CAboutDlg : public CDialog

{

???...? ...

void CMthread1Dlg::OnStart()??

{

????// TODO: Add your control notification handler code here

????hThread = CreateThread(

?????????????????NULL,?????????????????????????????????? // SD

?????????????????0,????????????????????????????????? // initial stack size

????????????????(LPTHREAD_START_ROUTINE)ThreadProc,??? // thread function

????????????????NULL,??????????????????????????????????? // thread argument

????????????????0,?????????????????????????????????? // creation option

?????????????????&threadID?????????????????????????????? // thread identifier

????????????????);

????GetDlgItem(IDC_START)->EnableWindow(FALSE);

????GetDlgItem(IDC_STOP)->EnableWindow(TRUE);

}??

?

void CMthread1Dlg::OnStop()

{

????// TODO: Add your control notification handler code here

????m_bRun = FALSE;

????GetDlgItem(IDC_START)->EnableWindow(TRUE);

????GetDlgItem(IDC_STOP)->EnableWindow(FALSE);

}

  執行結果:

總結

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

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

主站蜘蛛池模板: 高清日韩av | 成人午夜av | 91在线免费视频 | 久久久久人妻一区二区三区 | 亚洲熟妇无码久久精品 | 99热中文 | 性――交――性――乱睡觉 | 99久久久无码国产精品不卡 | 亚洲欧美字幕 | 亚洲50p | 激情小说在线观看 | 亚洲wwww | 欧洲精品免费一区二区三区 | 欧洲精品一区 | 国产美女福利在线 | 日本一区二区三区久久 | 国产手机看片 | 亚洲爱情岛论坛永久 | 日本三级黄在线观看 | 欧美色狠 | 艳妇臀荡乳欲伦交换在线播放 | 欧美天堂网站 | 强行糟蹋人妻hd中文 | 国产精品理伦片 | 欧美高清69hd| 久久国产精品-国产精品 | 国产精品videossex久久发布 | 黄网在线免费观看 | 精品不卡一区二区三区 | 国产精品不卡一区二区三区 | 中国无码人妻丰满熟妇啪啪软件 | 3p视频在线观看 | 狠狠爱综合 | 黄在线视频 | 日韩视频免费观看高清完整版在线观看 | 国产在线免费av | 亚洲一区二区三区人妻 | 男同志毛片特黄毛片 | bt天堂新版中文在线地址 | 国产午夜精品一区二区三区 | www.成人av.com| 好吊日免费视频 | 欧美日a| 三级国产网站 | 国产三级在线观看 | 九色激情网 | 亚洲一二三四在线 | 综合久久激情 | 久久亚洲综合色图 | 在线国产播放 | 亚洲一区二区自拍偷拍 | 6699嫩草久久久精品影院 | 欧美xxxx性 | 欧美伊人久久 | 午夜爱爱免费视频 | 精品国产一区二区三区久久久蜜月 | 免费色网 | 日韩欧美有码 | 天天干天天干天天操 | 让人下面流水的视频 | 嫩草在线观看视频 | 国产精品美女在线观看 | 国产一级一级 | 一区二区三区视频在线免费观看 | 欧美成人精品一区二区男人小说 | 最好看的mv中文字幕国语电影 | 黑人乱码一区二区三区av | 精品免费一区二区三区 | 尤物视频在线免费观看 | 国产无码精品在线观看 | 国产人妻精品久久久久野外 | 精品久久久亚洲 | 捆绑中国女人hd视频 | 大奶子情人 | 两女双腿交缠激烈磨豆腐 | 日本中文字幕网站 | 春色网站 | 欧美一级免费黄色片 | 免费a级片在线观看 | 国产精品一区二区三区四区五区 | 日韩av网站在线播放 | 午夜欧美成人 | 精品无码国产一区二区三区51安 | 久久不射视频 | 欧美韩日| 日韩五码电影 | 雪花飘电影在线观看免费高清 | 国产精品五区 | 青娱乐极品在线 | 黑白配av| 97精品国产97久久久久久免费 | 亚洲精品人妻无码 | 欧美激情在线观看一区 | 国产真人无遮挡作爱免费视频 | 国产精品美女av | 加勒比成人av | 日韩视频播放 | 大奶骚 | 女优视频在线观看 |