MFC/C++学习系列之简单记录2------thread和Release
- 前言
- MFC的Release版本发布
- Thread的相关知识
-
- 简单举例使用
- 引用学习
- 总结
前言
针对最近用到得东西进行记录!
MFC的Release版本发布
基于VC 6.0平台进行Release版本生成。
- Project------>Setting
- Setting For------>Win32 Release------>ok
- Build------>Batch Build
- ✔XX-Win32 Release------>Build
编译器就会主动生成Release版本了。
Thread的相关知识
在网口和串口通讯中为了持续不断的接收数据,一般会开启线程进行数据接收和发送。MFC中会使用到AfxBeginThread进行线程开启工作。
详细介绍一下AfxBeginThread,是基于CWinThread定义。主要的参数有以下几个:
- AFX_THREADPROC pfnThreadProc------线程函数入口(额外定义一个函数,然后在函数中处理接收、发送数据)
- LPVOID pParam------传递的参数
- int nPriority=THREAD_PRIORITY_NORMAL------优先级
- UINT nStackSize=0------堆栈大小
- DWORD dwCreateFlags=0------标志
- LPSECURITY_ATTRIBUTES lpSecurityAttrs=NULL------线程安全属性
在使用时,一般直接这样用:
cpp
CWinThread* xx=AfxBeginThread(XX,this)
只需要关注前面两个参数就好,其他为默认的。如果要额外设置,可以使用SetThreadPriority
。
cpp
SetThreadPriority(xx, THREAD_MODE_BACKGROUND_END)
线程开启后,我们可以对线程在某些需要的时候进行线程重启、挂起以及停止。
cpp
xx->ResumeThread();
xx->SuspendThread();
xx=NULL;
AfxEndThread(yy);
关于停止线程,看到一些方式,有的直接在开启线程中while循环时,在循环判断里设置一个标志位,当需要停止线程,则设置标志位类停止线程。
cpp
while (flag)
{
线程要执行的函数
}
依据flag的变化来进行线程的开启与停止。这种似乎不是很好,无法理解线程是否正常关闭了。
还看到AfxEndThread
。但是查阅资料显示,终止线程可能会导致线程相关的资源(如句柄、内存等)不被正确释放。因此,应当确保线程已经完成了它的工作,并且可以安全地终止。除了这个还有return 0也可以。
简单举例使用
cpp
CWinThread* xx;
bool flag=true;
xx=AfxBeginThread(xx_func,this);
UINT yy::xx_func(LPVOID lparam)
{
while(flag)
{
执行函数
}
}
void end()
{
flag=false;
AfxEndThread(0);
}
引用学习
总结
关于线程的使用介绍和Release版本的生成说明!