VCMFC 动态创建多线程

VCMFC 动态创建多线程,第1张

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等同步对象来控制。

对于多线程的运行机制的理解,比较重要。

理解了之后,你才能游刃有余地控制它。要不然,很容易带来问题。

synchronized要用在 *** 作的对象上,或读和写锁相同的。

放置第 1 批次

取走第 1 批次

放置第 2 批次

取走第 2 批次

放置第 3 批次

取走第 3 批次

放置第 4 批次

取走第 4 批次

放置第 5 批次

取走第 5 批次

~

~

~

1.一部分用户界面(UI)程序(如Windows窗口程序)是以用户 *** 作驱动的,程序的主线程必须不间断地地等待和响应用户 *** 作,也就是说不是在等待用户输入就是在处理用户输入。这时如果有个运算需要长时间持续执行,假如让主线程执行它,执行时间内就无法响应用户 *** 作。可以为它创建一个独立的线程,它独立工作,不受用户 *** 作影响,而主线程也能继续快速响应用户 *** 作;

2.服务器需要并行处理多个客户端输入;

3.大规模运算通过同时占用多个CPU核心提高运算速度;

4.程序有运算,同时还需要与一个或多个IO较慢的输入输出设备进行数据交换。

打个比方,有些复杂的、系统性的任务就象是人体一样,需要并行的做许多工作,例如,人需要同时呼吸,血液循环,消化食物,而不是先呼吸,然后血液循环,再消化食物。这样的程序就需要用多线程,以有效的使用处理器和用户的时间。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11894864.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存