多執行緒
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按鈕的響應函式改為
在原來的程式上進行改動。向對話方塊類裡面新增乙個cwinthread* 的成員變數,不用初始化為null,這樣會報錯的,因為它只能通過afxbeginthread函式獲得。把start裡面的宣告去掉。其實上面的那個afxbeginthread,除前面兩個引數外,後面的都是預設引數,可以省略。而必須有的這兩個引數,乙個是執行緒函式的指標,乙個是傳遞給這個函式的引數。實際中我們經常這樣用 afxbeginthread(threadproc,this);//把this傳過去,就可以呼叫類的成員了. 這樣執行緒函式就可以使用和操作類的成員了。千萬要注意執行緒函式是靜態類函式成員。
執行緒是建立了,但是如果中途要暫停該怎麼做呢?
我們在建立執行緒的時候獲得了乙個cwinthread的指標,這是乙個指向執行緒物件的指標,cwinthread類裡面就有暫停與恢復的函式,下面我就演示一下。
然後新增乙個 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頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...