MFC与win32多线程创建对比

2 篇文章 0 订阅
1 篇文章 0 订阅

 前段时间课设,做了个多线程的项目,现在时间宽裕了一些,回来总结一下在这个过程中遇到的一些难点。

 其实,一开始打算就打算做MFC的多线程程序,但却是学着Win32入的多线程的门,所以算是遇到了一个岔路,后来就跌跌撞撞就把两种创建线程的方法和相关的信号量和互斥量都弄了一下,在此总结一下。

 如果有错请大家指正。

转载请注明:http://blog.csdn.net/code_while/article/details/79111469

 其实MFC封装后的WIN32,但二者在使用时还是有一点点差异的。

一、 在WIN32中,创建线程的方法是CreateThread函数方法,返回值是HANDLE句柄,对应的函数类型的创建方法为DWORD WINAPI 你的函数名(LPVOID lp);然而,在MFC中却不可以直接用CreateThread方法,因为CreateThread是Windows自带的API函数,可以直截了当的创建一个新的线程,但在MFC中创建线程时,需要考虑到MFC中的初始化工作,否则创建的线程是不安全的,极度不容易控制的,所以应该使用封装了CreateThread方法的AfxBeginThread函数方法,他会创建一个CWinThread对象,然后它将自行调用CWinThread::CreateThread方法对该CWinThread对象进行初始化操作,从而完成了MFC中线程的创建,对应的线程函数类型的创建方法为UINT 你的函数名(LPVOID lp)。

 对比一下:

 

 WIN32MFC
线程创建函数类型DWORD WINAPI 你的函数名(LPVOID lp)UINT 你的函数名(LPVOID lp)
线程创建HANDLE my_thread=CreateThread(线程函数名,参数名,0,0,0,NULL)CWinThread *my_thread=new CWinThread
my_thread=AfxBeginThread(线程名,参数,0,0,0,NULL)
线程挂起SuspendThread(my_thread)my_thread->SuspendThread()
线程唤醒ResumeThread(my_thread)my_thread->ResumeThread()
线程终止TerminateThread(my_thread,0)
CloseHandle(my_thread)
TerminateThread(my_thread->m_thread,0)

二、MFC中的互斥量和信号量其实都封装的WIN32中的互斥量和信号量,可简单对比如下:

互斥量WIN32MFC
创建互斥量HANDLE CreateMutex(安全属性,最初状态,互斥量名字)CMutex my_cmutex(FALSE,NULL)
互斥量加锁WaitForSingleObject(HANDLE h_mutex,时间)my_cmutex.Lock()
互斥量解锁ReleaseMutex(HANDLE h_mutex)my_cmutex.Unlock()
信号量WIN32MFC
创建信号量HANDLE CreateSemaphore(安全属性,初始值,最大值,信号量名字)CSemaphore*my_csemaphore
信号量+1WaitForSingleObject(HANDLE h_semaphore,时间)my_csemaphore->Lock()
信号量-1ReleaseSemaphore(HANDLE h_semaphore)my_csemaphore->Unlock()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值