持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
线程和进程的区别
线程会共享此进程中的地址空间,但是每个进程之间的地址空间都是互相独立的。
线程会共享此进程中的资源,例如内存 cpu等等,但是进程之间的资源师独立存在的。
线程死则程序死,进程死不影响别的进程。
单个进程(相当于一个exe,并且运行在他专用的并且受保护的内存中) 多个线程实现并发 就是一个主线程 多个子线程实现并发
线程是进程的基本执行单位,一个进程中可以有许多个线程,并且所有任务都在线程中执行,由此可见进程中至少有一个线程。
开启一个线程
程序会默认开启以日奥线程 被称为主线程。
std::*thread* pThread = std::*thread*(&CSerialComUnit::ThreadFunc, this);
pThread.*detach*();
pThread.join();
thread.Join
把指定的线程加入到当前线程,可以将两个交替执行的线程合并为顺序执行的线程。比如在线程B中调用了线程A的Join()方法,直到线程A执行完毕后,才会继续执行线程B。
join是阻塞当前线程,并等待object对应线程结束,该线程继续执行搜索.
一个线程只能join一次
一般用在,主线程等待子线程退出后,一起退出线程。
detach
是将线程从当前线程分离出去,即不受阻塞,操作系统会将其独立对待。
在创建子线程之后,detach该线程ID,该线程不受堵塞。
HANDLE m_hThread = *CreateThread*(NULL, 0, TheoryExamThreadFunc, this, 0, NULL);
*TerminateThread*(pThread, 0); 用于在线程外终止一个线程 强制终止
线程:
注意:创建一个线程 不做处理 会调用abort函数终止程序
std::*thread*(begin, this,Key, Path);
std::ref 用于包装引用 如果begin第一个参数是int& num 那这里的Key需要写成 std::ref(Key)
第一个参数是它的处理函数 后面是函数的参数
Class 不继承任何 如果当前类在main函数中应用 会在程序启动时初始化