vsmfc怎麼添加工作線程
⑴ MFC中怎麼創建多個線程,代碼添加在哪
1)從CWinThread的派抄生類如:CUserThread;
注意:需要將變數的地址傳給派生類的線程對象訪問。
2)創建新的用戶線程
CUserThread* pThread=new CUserThread();
pThread->CreateThread();
⑵ MFC單文檔怎麼添加線程
線程簡單來說就是一個函數,添加一個靜態的全局函數DWORD WINAPI ThreadProc( void *pData ) ,這個函數只有一個版參數,可以轉換為你想權要的類型。
然後在啟用線程的地方添加 CreateThread( NULL, 0, ThreadProc, this, 0, NULL );
該線程函數完成後,自動退出。
⑶ MFC中怎樣創建線程
使用AfxBeginThread函數
⑷ mfc 怎麼新建線程 新建一個線程,並讓線程執行一段for循環的操作, 要具體代碼
#include <windows.h>
#include <stdio.h>
int loopproc(int times){
for(;times>0;times--){
printf("hello world\n");
}
}
int main(int argc,char** argv){
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)loopproc,(void*)50,0,NULL);
getchar();
return 0;
}
MFC里原理相同沒任何區專別。屬
⑸ 新手求教,MFC里UI線程和工作線程的創建和參
1.用AfxBeginThread創建的線程結束時,不必調用什麼函數,只要return 就可以了,主線程回可以通過消息或答事件(推薦)來結束線程。如下:
HANDLE hStop;
UINT TestThread(LPVOID)
{
while(true)
{
DWORD ret=WaitForSingleObject(hStop,0);
if (ret==WAIT_OBJECT_0) //有停止事件
{
break;
}
//do somthing...
}
return 0L;
}
CTestView::OnAAAClick()
{
hStop=CreateEvent(NULL,FALSE,FALSE,NULL);
AfxBeginThread(TestThread,NULL); //開始線程
}
CTestView::OnBBBClick()
{
SetEvent(hStop); //結束線程
CloseHandle(hStop);
}
⑹ MFC中如何創建一個線程
//放在需要創建線程的地方,如主程序
//保存線程的ID。
DWORD dwThreadID = 0;
HANDLE hThread=CreateThread(NULL,0,DownloadThread,0,NULL,&dwThreadID);//創建專下載線程
//全局函數屬
static DWORD WINAPI DownloadThread(void *pArg)
{
//這里寫上創建線程做什麼的函數
return 0;
}
////////////等待線程結束
//等待線程結束。
DWORD dRet;
MSG msg;
while (1)
{
dRet=::MsgWaitForMultipleObjects(1,&hThread,FALSE,INFINITE,QS_ALLINPUT);
if (dRet == WAIT_OBJECT_0+1)
{
while (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
break;
}
}
//刪除的線程資源。
CloseHandle(hThread);
⑺ 求高手寫個MFC最簡單的對話框中加個工作線程的小程序
MFC中開線程確實是個麻煩的問題,最大的問題在於開出來的線程函數不能直接使用MFC的一些機制,比如一個基於對話框工程,dlg cpp中寫了一個線程函數,那麼這個函數不能使用當前dlg類的所有成員,函數,所以直接調用控制項變數是不行的,另外獲取指針的方法也不行,只有在MFC類的成員函數中才能使用GetDlgItem( IDC_EDIT1 ),在其他函數中只能使用HWND GetDlgItem(HWND hDlg,int nIDDlgItem),使用後GetDlgItem( NULL,IDC_EDIT1 )->只彈出一個unused
當然辦法還是有的,思路是先全局定義一些變數,在工作者線程中去不斷改變變數的值,把變數值反饋給對話框的任務交給OnTimer(),因為你的要求是自動刷新,那麼也就是每隔一定時間刷新,那麼OnTimer()就必不可少了。
我給你個例子,要寫的代碼非常少就不發工程了,步驟如下
建一個基於對話框工程,添加一個按鈕,一個editbox,editbox綁定一個control變數c_edit
然後在oninitdialog中加int iInstallResult;
iInstallResult=SetTimer(1,1,NULL);
同樣是這個cpp文件中的開頭加int num=0;(全局)
再在全局位置添加線程函數
UINT fun(LPVOID pParam)
{
while(1)
{
++num;
if(num>=1000) num=0;
}
return 0;
}
為按鈕添加單擊事件,加入代碼AfxBeginThread(fun,NULL);
最後為對話框添加OnTimer事件,代碼如下
CString s;
s.Format(_T("%d"),num);
c_edit.SetWindowTextW(s);
CDialog::OnTimer(nIDEvent);
這個程序運行後OnTimer就已經啟動,會不斷把num值寫入editbox,點擊按鈕後,fun線程啟動,不斷累加num,直到1000時歸零,也就是editbox不斷在0-1000之間滾動
其實想想工作者線程中也並不需要MFC機制,能處理一些數據就可以了,標准cc++的庫還是可以正常使用的,當然至於不能使用MFC的機制估計很有可能是我沒發現用法,比如獲取指針那裡雖然只彈出一個unused,但是畢竟有這個函數有它的作用的,只不過我不知道用法而已,另外發送消息機制我是實在不會,也不知道能不能正常使用,不過不出意外估計也是不能直接拿來用的,不像mfc那麼方便
這是開線程的一種思路,我也不知道一般軟體開發這種情況是用的什麼技術,至於怎麼在線程中使用MFC機制,就看你有沒有這個興趣往那個方向去研究了
⑻ mfc中如何創建線程
static UINT ThreadFunc(LPVOID pParam);//線程函數聲明
UINT CTestApp::ThreadFunc(LPVOID pParam)
{
//線程函數實現
}
CWinThread *m_pThread; //線程指針
m_pThread = AfxBeginThread(ThreadFunc, NULL); //啟動線內程
就可以了容
⑼ VC++,MFC怎麼創建一個線程,然後詳細如下
在主程序里用抄CreateThread創建好線程,然後線程里Sleep(500)也就是0.5秒,最後就讀一次隊列的第一個元素就好了。隊列可以用vector、list或者單純的CStringArray來做即可。
看你的問題,覺得實現起來不困難,不知道你卡在哪裡了?