首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC,中怎么使用线程

2012-08-15 
MFC,中怎样使用线程?C# code// 工作线程UINT CTestCallDllDlg:: MyThreadProc( LPVOID pParam ){Test1(1)

MFC,中怎样使用线程?

C# code
// 工作线程UINT CTestCallDllDlg:: MyThreadProc( LPVOID pParam ){    Test1(1);    return 0;}int CTestCallDllDlg:: Test1(int a){    return a+1;}


希望在点击一个按钮后, 让Test1方法,工作在一个线程, 请问应该怎样实例呢? 并且怎样个传递参数, 获取方法的返回值? 谢谢

麻烦在这个代码基础上,帮忙完善...谢谢

[解决办法]
在CTestCallDllDlg类定义一个变量,用来存放结果m_iResult;
static UINT MyThreadProc( LPVOID pParam );


按钮的点击响应函数里
{
 AfxBeginThread( MyThreadProc, this );
}

UINT CTestCallDllDlg:: MyThreadProc( LPVOID pParam )
{
CTestCallDllDlg * pDlg = (CTestCallDllDlg *)pParam;
m_iResult = pDlg->Test1(1);
return 0;
}

[解决办法]
顶,接分
[解决办法]
在按钮的click事件中

1. 调用AfxBeginThread( MyThreadProc, this ); this就是传递给线程MyThreadProc的参数。 
2. 可以在dlg里定义个一个成员参数, 比如m_iParam;

MyThreadProc本来就支持UINT返回值啊, 你直接在MyThreadProc修改如下:
UINT CTestCallDllDlg:: MyThreadProc( LPVOID pParam )
{

return this->Test1(this->m_iParam);
}

[解决办法]
使用CThread类即可。
[解决办法]
虽然在MFC中,还是建议用_beginthreadex创建线程

[解决办法]
C/C++ code
HANDLE hThread;hThread = ::CreateThread(NULL,0,MyThreadProc,(LPVOID)this,0,NULL);
[解决办法]
C/C++ code
unsigned threadID;HANDLE hThread;hThread = (HANDLE)_beginthreadex(NULL,0,&CTestCallDllDlg::MyThreadProc, NULL,0,&threadID);
[解决办法]
学习下了。
[解决办法]
你的线程函数怎么定义的
UINT __cdecl MyThreadProc(LPVOID lparam)
{
 ...
 return 0;
}
[解决办法]
UINT CTestCallDllDlg:: MyThreadProc( LPVOID pParam )改为static UINT CTestCallDllDlg:: MyThreadProc( LPVOID pParam )
[解决办法]
线程函数必须定义成全局函数或者类的静态成员函数。。
[解决办法]

{
 AfxBeginThread( MyThreadProc, this );
}

UINT CTestCallDllDlg:: MyThreadProc( LPVOID pParam )
{
CTestCallDllDlg * pDlg = (CTestCallDllDlg *)pParam;
pDlg->Test1(1);
return 0;
}

 MyThreadProc( LPVOID pParam )必须定义成全局函数或者类的静态成员函数
static MyThreadProc()
[解决办法]
探讨
引用:
UINT CTestCallDllDlg:: MyThreadProc( LPVOID pParam )改为static UINT CTestCallDllDlg:: MyThreadProc( LPVOID pParam )


如果将MyThreadProc申请为Static 的话, 那么这个方法是需就不能调用 非静的方法了?

……

热点排行