VC/MFC 动态创建多线程

1、MFC程序中如何动态创建多线程?比如为按钮添加一个消息响应函数,点击按钮,就可以创建一个线程。这种情况下,线程处理函数要怎么写呢?比如调用AfxBeginThread... 1、MFC程序中如何动态创建多线程?
比如为按钮添加一个消息响应函数,点击按钮,就可以创建一个线程。这种情况下,线程处理函数要怎么写呢?比如调用AfxBeginThread,第一个参数应该是线程处理函数,这个参数应该在编译时候就已经确定了,可是要在程序运行的才创建的线程,要怎么处理呢?

2、如果创建的线程很多的话,对应的线程处理函数就会很多,有没有一种有效的处理方法?
因为程序中的线程函数的函数体都是相似的,能不能灵活一点,只写一个线程处理函数,就能让不同的线程对应不同的线程函数?或者能让不同的线程对应一个线程函数,但是不会出错?
展开
 我来答
郑大满
2010-06-07 · TA获得超过270个赞
知道小有建树答主
回答量:67
采纳率:0%
帮助的人:0
展开全部
1. 因为你是MFC程序,建议使用AfxBeginThread()来创建新线程。AfxBeginThread()的内部会做一些相应的初始化,再调用CreateThread()API。 线程处理函数也就是一个普通的函数,但是其声明形式有规定的,如下:
DWORD WINAPI ThreadProc (LPVOID pParam);
线程函数的名字由你自己定,但是格式必须是什么这个声明形式。比如:
DWORD WINAPI MyThreadFunction (LPVOID pParam)
{
// 函数体,这里你写你的处理代码。
// 只是在理解上,要注意的是,这个线程函数体里面的代码是
// 在新的线程中运行。虽然在源代码上,这里面的代码和其他的代码
// 存在于同一个文件中
}

“可是要在程序运行的才创建的线程,要怎么处理呢”--》不明白你的这个子问题的意思。
新的线程都是在程序运行起来之后,由相应的创建函数创建的。没有哪个线程是在编译时创建的啊。

2. 同一个线程处理函数的代码可以被多个线程共享的。可就是说,你可以只定义一个线程函数。不同的线程创建起来后,运行相同的代码。可以通过传递不同的参数(这个参数可以在创建新线程时从外面传递进去),来让线程函数体内的代码有不同的运行逻辑。
DWORD WINAPI MyThreadFunction (LPVOID pParam /*线程的参数*/)
{
int nMyParam = (int)pParam;
if ( 0 == nMyParam ) { ... }
else if ( 1 == nMyParam ) { ...}
else if (...) {...}
}
对于线程函数的参数,它是LPVOID,但是你在外面可以给他传递一个整形,或者指针,然后在线程函数体内强制转型回来使用。真正使用什么数据类型,与你自己控制。

在理解上,也要注意理解多个线程运行同一份代码的意思。
如果多个线程的线程函数读写同一个全局变量或者访问同一个资源,就需要做同步控制。使用临界区,Mutex等同步对象来控制。

对于多线程的运行机制的理解,比较重要。
理解了之后,你才能游刃有余地控制它。要不然,很容易带来问题。
yaoyue1019
2010-06-07 · 知道合伙人互联网行家
yaoyue1019
知道合伙人互联网行家
采纳数:804 获赞数:3392
擅长lua脚本 与android前端交互设计

向TA提问 私信TA
展开全部
http://baike.baidu.com/view/1191444.htm
我一般使用这个函数产生线程

至于线程数多的问题

既然是有需求才产生线程 开销是无法避免的

使用CreateThread创建线程时 注意两个参数 一是程序入口参数 二是程序参数的参数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
paniclp
2010-06-07 · TA获得超过232个赞
知道小有建树答主
回答量:700
采纳率:0%
帮助的人:428万
展开全部
你可能没有理解的很好,个人感觉多线程很好用,没有问题,建议看看基础的书籍
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式