mfc 线程的诞生和死亡
知识点:
线程概念
线程的诞生
线程的死亡 一、 线程: 线程,是程序执行流的最小单元。
另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。每一个程序都至少有一个线程,那就是程序本身。
线程是程序中一个单一的顺序控制流程。在单个程序中同时运行多个线程完成不同的工作,称为多线程。
二、线程的诞生
产生一个新的线程 调用 CreateThread实现,这时系统会为我们完成下列事情:
、创建“线程对象”,将其Handle作为CreateThread返回值。
、为“线程对象”,设定计数值为1
、配置线程上下文环境(context)
、分配线程堆栈
、初始化SS堆栈指针和IP指令指针
、转到线程代码开始处。 三、进程的死亡
、执行完代码后正常退出,或者遇到return时结束。ExitThread
、调用TerminateTheard强制结束。 四、相关代码测试
、与线程相关的API函数
CreateThread
GetExitCodeThread
ExitThread
GetThreadPriority
SetThreadPriority
CloseHandle
CreateRemoteThread
ResumeThread
GetThreadContext
SetThreadContext
ThreadProc //回调函数
C run-time libraries里
beginthread
endthread
、代码测试 DWORD WINAPI ThreadProc1(
LPVOID lpParameter // thread data
)
{static int i=;
while()
{
Sleep();
TRACE("thread i=%d \n",i++);
} return ;
} HANDLE th;
void CDialog_PROCESS::OnBnClickedButton4()
{
// TODO: 在此添加控件通知处理程序代码
DWORD tid;
//创建新线程
th=CreateThread(NULL,,ThreadProc1,,CREATE_SUSPENDED,&tid);
} void CDialog_PROCESS::OnBnClickedButton5()
{
// TODO: 在此添加控件通知处理程序代码
ResumeThread(th); //恢复线程
} void CDialog_PROCESS::OnBnClickedButton6()
{
// TODO: 在此添加控件通知处理程序代码
SuspendThread(th);//挂起线程
} void CDialog_PROCESS::OnBnClickedButton7()
{
// TODO: 在此添加控件通知处理程序代码
TerminateThread(th,);
}
mfc 线程的诞生和死亡的更多相关文章
- mfc 进程的诞生和死亡
进程概念 进程的诞生 进程的死亡 一. 进程: .简单的说 双击一个EXE图标时,系统就会产生一个相应的进程,分配相应的资源,并执行相应的代码. .标准一些的说法: 进程是一个具有独立功能 ...
- MFC 线程创建方式
MFC 分UI线程和工作线程,一般现在的应用程序都是一个主UI线程和N个工作线程来完成工作.主UI线程获取到工作线程发送的信息来刷新界面. 不过因为工作需要,MFC有要维护的项目,因此就学习一下MFC ...
- MFC 线程中CWnd对象
尽量不要在MFC线程中将CWnd作为参数传递,会引起crash 正确的做法: 1. 将CWnd对应的handle传进来,通过CWnd::FromHandle()函数转换: 2. 在线程中用SendMe ...
- JAVA - 线程从创建到死亡的几种状态都有哪些?
JAVA - 线程从创建到死亡的几种状态都有哪些? 新建( new ):新创建了一个线程对象. 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 的 sta ...
- 安全终止MFC线程
终止线程 有两种情况可以使线程结束:控制函数结束或者根本就不允许线程完成,而提前终止它.我们可以想象在WORD中进行后台打印,如果打印结束了,那线程就可以结束了.如果用户中止了打印,那后台打印线程也要 ...
- MFC线程钩子和全局钩子[HOOK DLL]
第一部分:API函数简介 1. SetWindowsHookEx函数 函数原型 HHOOK SetWindowsHookEx( int idHook, // hook typ ...
- MFC线程(三):线程同步事件(event)与互斥(mutex)
前面讲了临界区可以用来达到线程同步.而事件(event)与互斥(mutex)也同样可以做到. Win32 API中的线程事件 HANDLE hEvent = NULL; void MainTestFu ...
- 多开 MFC线程
序言:我才编程几年啊!就要处理多线程.对于只写函数的我,这难度简直了!不过MFC的多线程,貌似比较简单,还能处理的了. (1).开MFC多个线程 在视频采集的过程中,如果不使用媒体计数器,会造成主线程 ...
- Boost多线程-替换MFC线程
Mfc的多线程看起来简单,可以把线程直接压入向量,由系统类似进行调配,其实在内存的处理问题上留下了漏洞.在新线程里面载入大量流,会导致内存泄露. 方便之处:直接使用结构体传入函数参数,供 ...
随机推荐
- View的measure机制
Android中View框架的工作机制中,主要有三个过程: 1.View树的测量(measure)Android View框架的measure机制 2.View树的布局(layout) And ...
- springcloud 入门 2 (Enreka的服务和注册)
spring cloud eureka: eureka 用以服务发现.服务注册,比较流行的有consul(后面再介绍) eureka介绍: eureka为netflix开源软件,分为三个部分: eur ...
- ECMAScript5新特性总结
虽然ECMAScript5早就成为标准推出来了,但之前因为一直用的是ECMAScript3,并且工作中总是要求兼容IE的低版本,所以用的比较少.如今市场上大多数浏览器都能兼容ECMAScript5(I ...
- jboss eap 6.2 ear包 下使用log4j日志
被jboss7/eap的日志问题搞死了,查了好多资料,都是war包的,基本上使用jboss-deployment-structure.xml放到WEB-INF下,文件内容如下: 是我总是没法成功,最后 ...
- MySQL crash-safe replication(2):
MySQL数据库的成功离不开其replicaiton(复制),相对于Oracle DG和Microsoft SQL Server Log Shipping来说,其简单易上手,基本上1,2分钟内根据手册 ...
- MySQL锁系列之锁的种类和概念
转自:http://keithlan.github.io/2017/06/05/innodb_locks_1/ 锁是MySQL里面最难理解的知识,但是又无处不在. 一开始接触锁的时候,感觉被各种锁类型 ...
- 转:Newtonsoft.Json高级用法
原文地址:http://www.cnblogs.com/yanweidie/p/4605212.html 手机端应用讲究速度快,体验好.刚好手头上的一个项目服务端接口有性能问题,需要进行优化.在接口多 ...
- AD用户移除所属组
AD用户移除所属组: $Membership = Get-ADPrincipalGroupMembership $Users $Membership.distinguishedName Remove- ...
- jQuery表格排序(tablesorter)
1.在html页面的head中引用 <script src="/static/Bootstrap/js/jquery/jquery.tablesorter.min.js"&g ...
- 安装Tidb数据库出现SSD硬盘IOPS不到40000的错误
今天安装tidb数据库出现IOPS过低的问题,这里如果仅仅是测试的话我们可以降低这个值,大概遇到的问题是: 解决方法: 1.我们在中控机的目录下修改某个配置文件: [tidb@:vg_adn_tidb ...