歡迎使用CSDN markdown編輯器

2021-07-12 01:36:04 字數 1333 閱讀 4597

多執行緒

multithread

afxbeginthread 函式的使用

使用者介面執行緒和工作者執行緒都是由afxbeginthread建立的。現在,考察該函式:mfc提供了兩個過載版的afxbeginthread,乙個用於使用者介面執行緒,另乙個用於工作者執行緒,分別有如下的原型和過程:

工作者執行緒的afxbeginthread

工作者執行緒的afxbeginthread的原型如下:

cwinthread* afxapi afxbeginthread(

afx_threadproc pfnthreadproc,

lpvoid pparam,

int npriority,

uint nstacksize,

dword dwcreateflags,

lpsecurity_attributes lpsecurityattrs)

其中:

引數1 執行緒的入口函式,宣告一定要如下: uint mythreadfunction( lpvoid pparam );

引數2 傳遞入執行緒的引數,注意它的型別為:lpvoid,所以我們可以傳遞乙個結構體入執行緒.

引數3、4、5分別指定執行緒的優先順序、堆疊大小、建立標識、安全屬性,含義同使用者介面執行緒。

附錄a:

下面用多執行緒的方法來解決,在start按鈕的響應函式改為
其實上面的那個afxbeginthread,除前面兩個引數外,後面的都是預設引數,可以省略。而必須有的這兩個引數,乙個是執行緒函式的指標,乙個是傳遞給這個函式的引數。實際中我們經常這樣用 afxbeginthread(threadproc,this);//把this傳過去,就可以呼叫類的成員了. 這樣執行緒函式就可以使用和操作類的成員了。千萬要注意執行緒函式是靜態類函式成員。

執行緒是建立了,但是如果中途要暫停該怎麼做呢?

我們在建立執行緒的時候獲得了乙個cwinthread的指標,這是乙個指向執行緒物件的指標,cwinthread類裡面就有暫停與恢復的函式,下面我就演示一下。

在原來的程式上進行改動。向對話方塊類裡面新增乙個cwinthread* 的成員變數,不用初始化為null,這樣會報錯的,因為它只能通過afxbeginthread函式獲得。把start裡面的宣告去掉。

然後新增乙個 pause 按鈕向其響應函式裡面新增** mythread->suspendthread(); 再新增乙個 resume按鈕,向其響應函式裡面新增 mythread->resumethread();

再執行程式,我們start之後,按下pause可以看到cpu恢復正常,然後resume,cpu又漲上去了,到此證明一切操作正常。

歡迎使用CSDN markdow

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...

歡迎毛毛與妞妞使用CSDN markdown編輯器

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

歡迎使用CSDN markdow1n編輯器

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...