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

多线程编程有关问题

2012-04-18 
多线程编程问题!代码如下:charMyStr[] Weareusingworktheadnow! charUpperStr[] Weareusingthreadno

多线程编程问题!
代码如下:
char   MyStr[]= "We   are   using   work   thead   now   ! ";
char   UpperStr[]= "We   are   using   thread   now   ! ";


void   CTestThreadView::OnWorkthread()  

{

//   TODO:   Add   your   command   handler   code   here

CDC   *pDC=GetDC();
pDC-> TextOut(20,20, "转换前的字符串为: ");
pDC-> TextOut(40,60,MyStr);
//char   *pString;
char   *   pParam;
//pString=(char   *)UpperStr;
pParam=(char   *)UpperStr;
//启动工作线程,MyWorkThread是线程函数

AfxBeginThread(MyWorkThread,(LPVOID)pParam);

pDC-> TextOut(20,100, "转换后的字符串为: ");
pDC-> TextOut(40,140,UpperStr);
ReleaseDC(pDC);

}

UINT     MyWorkThread(LPVOID   pParam)
{
        CWnd   *   pMainWnd=AfxGetMainWnd();
if   (pParam==NULL)
{
::MessageBox(pMainWnd-> m_hWnd, "参数传递出错,线程结束! ", "Thread   error ",
MB_OK   |   MB_ICONERROR);
AfxEndThread(2);
}
char   *   pStr=(char   *)pParam;
while   (*   pStr)
{
if(*pStr> = 'a '   &&   *pStr <= 'z ')
*pStr-=32;
pStr++;
}
::MessageBox(pMainWnd-> m_hWnd,(const   char   *)pParam, "Thread   run ",MB_OK);
return   0;
}

但提示有错误:
D:\c++编程结果\TestThread\TestThreadView.cpp(227)   :   error   C2665:   'AfxBeginThread '   :   none   of   the   2   overloads   can   convert   parameter   1   from   type   'unsigned   int   (void   *) '

哪位知道为什么阿?



[解决办法]
使用AfxBeginThread启动线程时,其第二个参数必须是LPVOID类型,即一个指向Void类型的指针,所以传递的参数也应该是相同的类型,而HWND实质为一个整数,所以要使用这个参数应该这样使用:AfxBeginThread(BounceProc,(LPVOID)(&hWnd));
然后在函数BounceProc的内部的第一句语句使用强制类型转换读取参数:
HWND hwndTemp = (HWND)(*pParam);
AfxBeginThread使用LPVOID的原因是使模块间可以传递多个的参数,比如pParam可以是一个指向结构体的指针,在函数内部强制转换后就相当于传递了多个参数。

热点排行