我把一个线程函数定义在了CThreadView里面并且把他声明为
PUBLIC:
static UINT ThreadFunc(LPVOID);
然后再实现的函数中想实现画图的功能具体的代码如下:
UINT CTreadView::ThreadFunc(LPVOID ThreadArg)
{
   DWORD dwArg=*(DWORD*)ThreadArg;
   RECT rect;
   GetClientRect(&rect);
   CClientDC dc(this);
   CBrush newbrush, OldBrush;
   DWORD dwThreadHits = 0;
   int iThreadNo, i;
   
  do
  {
    dwThreadHits++; // 计数器
    dc.Rectangle(int( *(ThreadArg)), rect.bottom-(dwThreadHits/10),int(*(ThreadArg)+0x40), rect.bottom);
   if (_uDelayType == SLEEPDELAY)
        Sleep(10);
   else if (_uDelayType == FORLOOPDELAY)
         for (i=0; i<30000; i++);
   else // _uDelayType == NODELAY)
   { }
  } while (dwThreadHits < 1000); // 循环 1000 次
 
}
但是在编译之后却出现了这样的错误提示:
mpiling...
TreadView.cpp
E:\VC PROJECT\TEST1\Tread\TreadView.cpp(105) : error C2352: 'CWnd::GetClientRect' : illegal call of non-static member function
        d:\program files\microsoft visual studio\vc98\mfc\include\afxwin.h(2051) : see declaration of 'GetClientRect'
E:\VC PROJECT\TEST1\Tread\TreadView.cpp(106) : error C2671: 'ThreadFunc' : static member functions do not have 'this' pointers
E:\VC PROJECT\TEST1\Tread\TreadView.cpp(114) : error C2100: illegal indirection
E:\VC PROJECT\TEST1\Tread\TreadView.cpp(114) : error C2100: illegal indirection
E:\VC PROJECT\TEST1\Tread\TreadView.cpp(114) : error C2036: 'void *' : unknown size
Error executing cl.exe.Tread.exe - 5 error(s), 0 warning(s)
对于我一个刚接触不久的人来说实在是不知道怎么解决这个问题,请前辈指教。
谢谢了!  

解决方案 »

  1.   

    1、静态函数没有this参数,所以不能用this。如果你需要使用类实例,可以在创建线程时把this作为参数传递,然后在线程中这样获得 
    CTreadView* pThis = (CTreadView*)ThreadArg;2、不要在其它线程中绘图,你可以修改某些数据,然后发消息给窗口,让窗口所在线程来完成绘制
      

  2.   

    请问
    用afxbeginthread在一个线程中创建另一个线程是否可以有两个参数呢?
      

  3.   

    只有一个参数,这是规范。一个参数已经足够了,你可以传递一个结构的指针,或者直接传递this,通过这个指针能访问结构或者类里的所有信息。