我把一个线程函数定义在了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)
对于我一个刚接触不久的人来说实在是不知道怎么解决这个问题,请前辈指教。
谢谢了!
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)
对于我一个刚接触不久的人来说实在是不知道怎么解决这个问题,请前辈指教。
谢谢了!
CTreadView* pThis = (CTreadView*)ThreadArg;2、不要在其它线程中绘图,你可以修改某些数据,然后发消息给窗口,让窗口所在线程来完成绘制
用afxbeginthread在一个线程中创建另一个线程是否可以有两个参数呢?