学习MFC多线程

本文档介绍了学习MFC多线程的过程,包括如何创建线程、控制线程执行状态,以及线程间的通信方式如PostThreadMessage。文中详细解释了CreateThread、SuspendThread、ResumeThread、ExitThread、TerminateThread等函数的使用,并提供了相关函数的参数说明和注意事项,同时给出了文档和代码的下载链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2016年1月7日

好吧,终于又要学习MFC了,唉,希望这次能吧MFC多线程学会。多谢dgp的程序大笑

首先在了解一下句柄吧:http://www.cnblogs.com/BeyondAnyTime/archive/2012/06/04/2535252.html

1.在ThreadFunc()里,对外部的控件进行控制;当然还有其他的方法。

<span style="white-space:pre">	</span>time=CTime::GetCurrentTime();
	strTime=time.Format("%H:%M:%S");  // 
	::SetDlgItemText(AfxGetMainWnd()->m_hWnd,IDC_TIME,strTime);
2. Win32 提供了一系列的API函数来完成线程的创建、挂起、恢复、终结以及通信等工作。下面将选取其中的一些重要函数进行说明。

(1)HANDLECreateThread(

LPSECURITY_ATTRIBUTES lpThreadAttributes,

DWORD dwStackSize,

LPTHREAD_START_ROUTINE lpStartAddress,

LPVOID lpParameter,

DWORD dwCreationFlags, 

LPDWORD lpThreadId);

该函数在其调用进程的进程空间里创建一个新的线程,并返回已建线程的句柄,其中各参数说明如下:

 lpThreadAttributes:指向一个SECURITY_ATTRIBUTES 结构的指针,该结构决定了线程的安全属性,一般置为 NULL; 

dwStackSize:指定了线程的堆栈深度,一般都设置为0; 

lpStartAddress:表示新线程开始执行时代码所在函数的地址,即线程的起始地址。一般情况为(LPTHREAD_START_ROUTINE)ThreadFunc,ThreadFunc 是线程函数名; 

lpParameter:指定了线程执行时传送给线程的32位参数,即线程函数的参数; 

dwCreationFlags:控制线程创建的附加标志,可以取两种值。如果该参数为0,线程在被创建后就会立即开始执行;如果该参数为CREATE_SUSPENDED,则系统产生线程后,该线程处于挂起状态,并不马上执行,直至函数ResumeThread被调用; 

lpThreadId:该参数返回所创建线程的ID; 

如果创建成功则返回线程的句柄,否则返回NULL。

2 DWORDSuspendThread(HANDLE hThread); 该函数用于挂起指定的线程,如果函数执行成功,则线程的执行被终止。

3 DWORDResumeThread(HANDLE hThread); 该函数用于结束线程的挂起状态,执行线程。

4 VOIDExitThread(DWORD dwExitCode); 该函数用于线程终结自身的执行,主要在线程的执行函数中被调用。其中参数dwExitCode用来设置线程的退出码。

5 BOOLTerminateThread(HANDLE hThread,DWORD dwExitCode);   一般情况下,线程运行结束之后,线程函数正常返回,但是应用程序可以调用TerminateThread强行终止某一线程的执行。各参数含义如下:

 hThread:将被终结的线程的句柄;

 dwExitCode:用于指定线程的退出码。   

使用TerminateThread()终止某个线程的执行是不安全的,可能会引起系统不稳定;虽然该函数立即终止线程的执行,但并不释放线程所占用的资源。因此,一般不建议使用该函数。 

6 BOOLPostThreadMessage(

DWORD idThread,   

UINT Msg,   

WPARAM wParam,   

LPARAM lParam);

该函数将一条消息放入到指定线程的消息队列中,并且不等到消息被该线程处理时便返回。 idThread:将接收消息的线程的ID; 

Msg:指定用来发送的消息; 

wParam:同消息有关的字参数;

lParam:同消息有关的长参数; 

调用该函数时,如果即将接收消息的线程没有创建消息循环,则该函数执行失败。


其实自己是用dgp给的一个文档学习的。

文档下载地址:http://download.youkuaiyun.com/detail/xuanyuanlei1020/9393705
代码下载地址:http://download.youkuaiyun.com/detail/xuanyuanlei1020/9393706

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值