C++的高手请进来,尤其是MFC的高手,关于AfxBeginThread
我写了一个函数用于取文件中的数字,放在工程中的CDoc中,叫做int*GetIntArray();又写了一个函数用于画图,放在CView中,叫做voidDrawMap;程...
我写了一个函数 用于取文件中的 数字,放在工程中的CDoc中,叫做
int *GetIntArray();
又写了一个函数用于画图,放在CView中,叫做void DrawMap;程序是一下子运行结束的。
现在的问题是 希望用AfxBeginThread,让线程边读边画。
1、 有高手说要把函数改为static类型的??
2、AfxBeginThread用于加线程的类型是UINT类型的,我的读文档函数是返回一个数组的首地址, 该怎么办?
3、我对线程基本理解,但是第一次接触AfxBeginThread,能不能给一个行之有效的建议啊?
4、虽然不用线程函数也能实现,不过我是为了学习线程,所以请高手给我一个样本,让我学习一下AfxBeginThread这种函数应该怎么使用? 展开
int *GetIntArray();
又写了一个函数用于画图,放在CView中,叫做void DrawMap;程序是一下子运行结束的。
现在的问题是 希望用AfxBeginThread,让线程边读边画。
1、 有高手说要把函数改为static类型的??
2、AfxBeginThread用于加线程的类型是UINT类型的,我的读文档函数是返回一个数组的首地址, 该怎么办?
3、我对线程基本理解,但是第一次接触AfxBeginThread,能不能给一个行之有效的建议啊?
4、虽然不用线程函数也能实现,不过我是为了学习线程,所以请高手给我一个样本,让我学习一下AfxBeginThread这种函数应该怎么使用? 展开
2个回答
展开全部
你可以在View中添加OnInitialUpdate函数,开启线程,将View的指针传给线程,然后在线程中读文件,调用View的Invalidate函数来刷新。
至于你说的static类型做为线程函数,是指的成员函数,线程函数不一定非要成员函数,如果你觉得成员函数做为线程函数方便的话,你可以通过View的指针来调用某个成员函数来实现,这样可以不用将成员函数设置成静态的。
AfxBeginThread第一个参数是线程函数名,第二个参数是穿给线程的参数。
例如OnInitialUpdate函数中,调用
AfxBeginThread(MyThreadProc, this);
然后写一个函数
UINT MyThreadProc(LPVOID lpParam)
{
CXXXView* pView = (CXXXView*)lpParam;
while (TRUE)
{
读操作
pView->Invalidate();
sleep(10);
}
return 0;
}
至于你说的static类型做为线程函数,是指的成员函数,线程函数不一定非要成员函数,如果你觉得成员函数做为线程函数方便的话,你可以通过View的指针来调用某个成员函数来实现,这样可以不用将成员函数设置成静态的。
AfxBeginThread第一个参数是线程函数名,第二个参数是穿给线程的参数。
例如OnInitialUpdate函数中,调用
AfxBeginThread(MyThreadProc, this);
然后写一个函数
UINT MyThreadProc(LPVOID lpParam)
{
CXXXView* pView = (CXXXView*)lpParam;
while (TRUE)
{
读操作
pView->Invalidate();
sleep(10);
}
return 0;
}
展开全部
一般用到前两个参数就行了
::AfxBeginThread(unsigned int *(__cdecl*)(void*), void*);
第一个参数是函数指针,这个函数必须是返回unsigned int,参数为void指针
第二个参数是void指针。实际上第二个参数就是传递到函数中的参数。
由于线程函数必须是全局函数,所以要用到的信息基本都是通过void指针传递的。
比如新建一个类
struct ThreadInfo
{
//需要的各种参数
...
};
在线程开始前
ThreadInfo* pInfo = new ThreadInfo;
pInfo->***=***;//赋值
::AfxBeginThread(ThreadFunc, pInfo);
::AfxBeginThread(unsigned int *(__cdecl*)(void*), void*);
第一个参数是函数指针,这个函数必须是返回unsigned int,参数为void指针
第二个参数是void指针。实际上第二个参数就是传递到函数中的参数。
由于线程函数必须是全局函数,所以要用到的信息基本都是通过void指针传递的。
比如新建一个类
struct ThreadInfo
{
//需要的各种参数
...
};
在线程开始前
ThreadInfo* pInfo = new ThreadInfo;
pInfo->***=***;//赋值
::AfxBeginThread(ThreadFunc, pInfo);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询