Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在不使用join()阻止主线程的情况下创建多个C++线程?

如何在不使用join()阻止主线程的情况下创建多个C++线程?
EN

Stack Overflow用户
提问于 2018-02-05 11:46:16
回答 1查看 2.1K关注 0票数 1

我在C++中有一个简单的TCP客户机/服务器,我目前正在为每个连接的用户生成一个线程来处理消息,但是我遇到了一些问题,我不知道如何解决它们,因为我不熟悉标准的C++线程。

当客户端连接到服务器时,将为该客户端创建一个线程,直到它们被断开连接为止。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clientThread = thread(processMessages);
clientThread.join();

此线程将持续到客户端的生命周期。正如我在这个线程上调用join()一样,当client 2连接而client 1仍然连接时,它会被join()调用阻塞。

删除此join()调用意味着当客户端断开连接时,由于线程可连接而导致终止()错误。

如何使这个客户端线程在后台处理,而主线程可以继续并接受新的连接?

EN

回答 1

Stack Overflow用户

发布于 2018-02-05 12:19:10

只需展示如何存储创建的thread对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
std::vector<std::thread> threads;
threads.emplace_back(processMessages);
...
for (auto & t : threads) t.join();

但是,正如其他人在评论中指出的那样,为每个新连接创建一个线程可能不是最好的方法。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48630349

复制
相关文章
不推荐使用executors创建线程池_创建线程池的几种方式
 java中线程池的创建除了使用ThreadPoolExecutor之外,还可以使用Executors的静态方法来获取不同的线程池。
全栈程序员站长
2022/09/27
6650
使用线程自己join自己完成线程门栓
public static void main(String[] args) throws InterruptedException { Thread thread = new Thread(new Runnable() { @Override public void run() { try { //这里可以放一个变量看看是否是0,只有1和0两种状态,当为0时,才可以进行后续代码,
gzq大数据
2022/05/11
2120
C++创建线程_C语言网络编程创建线程
使用CreateThread()函数创建,则线程函数必须申明为DWORD WINAPI;
全栈程序员站长
2022/09/27
2.3K0
Python线程-线程的创建和使用
在 Python 中,线程可以通过 threading 模块来创建和管理。线程可以同时执行多个任务,使程序能够更高效地利用 CPU 时间。
玖叁叁
2023/04/20
7930
UNIX(多线程):07---线程启动、结束,创建线程多法、join,detach
线程启动、结束,创建线程多法、join,detach 范例演示线程运行的开始和结束 程序运行起来,生成一个进程,该进程所属的主线程开始自动运行。 主线程从main函数开始执行,那么我们自己创建的线程,
用户3479834
2021/02/03
1.2K0
UNIX(多线程):07---线程启动、结束,创建线程多法、join,detach
C++多线程中的join, detach, joinable
       thread是C++11中提供多线程编程的模块,使用的时候需要包含<thread>头文件。
Ch_Zaqdt
2020/02/16
7.2K0
C++创建线程池_windows线程池iocp
线程池,简单来说就是有一堆已经创建好的线程(最大数目一定),初始时他们都处于空闲状态,当有新的任务进来,从线程池中取出一个空闲的线程处理任务,然后当任务处理完成之后,该线程被重新放回到线程池中,供其他的任务使用,当线程池中的线程都在处理任务时,就没有空闲线程供使用,此时,若有新的任务产生,只能等待线程池中有线程结束任务空闲才能执行。
全栈程序员站长
2022/11/14
9230
线程的join方法
join()方法的作用就是让主线程等待子线程执行结束之后再运行主线程。下面示例中t2 为主线程,需要等待子线程t1 执行完成再执行
全栈程序员站长
2022/08/26
3150
C++ 线程的使用
C++11 之前,C++ 语言没有对并发编程提供语言级别的支持,这使得我们在编写可移植的并发程序时,存在诸多的不便。现在 C++11 中增加了线程以及线程相关的类,很方便地支持了并发编程,使得编写的多线程程序的可移植性得到了很大的提高。
C语言与CPP编程
2021/10/09
9110
C++随笔(1)——关于C++11中的线程创建,join和detach
主要是和之前的博文有关,之前在这里有一部分代码是通过创建新的进程来应对新的用户请求的,但是基本没怎么解释怎么用的,所以这里做点小笔记。
太阳影的社区
2021/10/15
6510
多线程笔记(四)线程的状态,线程的停止,线程的休眠,线程礼让,join,线程优先级,守护线程
A和B 两个线程,当CPU执行B的时候,B进行礼让,那么就离开cpu,这个时候B就变为就绪状态,CPU就重新 在A线程和B线程之间进行选择,有可能还是让B线程执行,这个时候就没有礼让成功。
一写代码就开心
2021/08/24
6620
[javaSE] 多线程(join方法)
多条线程并发执行,随机切换,调用join()方法,会使当前线程所在的线程(一般主线程)冻结,直到当前线程结束,所在的线程才恢复继续执行
唯一Chat
2019/09/10
5540
[javaSE] 多线程(join方法)
关于c++杀线程函数TerminateThread强烈不建议使用
TerminateThread强烈不建议使用,因为这个函数的执行是异步的, 你无法保证调用之后会立即退出,同时线程的堆栈均不会被销毁, 导致内存泄露。如果调用了这个函数,请确保使用WaitForSingleObject来等待线程对象的结束。
全栈程序员站长
2022/07/21
8290
线程周期、创建线程的方式、线程池
多线程也是面试必问的东西,我们要了解线程的状态周期,创建线程的方式,以及线程池的使用。
崩天的勾玉
2021/12/20
9150
线程周期、创建线程的方式、线程池
java线程join方法
​ join方法的作用是进行线程插队,也就是说调用了join方法的线程相对于调用它的上级线程拥有跟高的执行权。调用join方法的线程的上级线程必须等待调用join方法的线程执行完成才能继续执行。
全栈程序员站长
2022/08/23
3360
【Java多线程-1】线程概述与线程创建和使用
进程是表示资源分配的基本单位,又是调度运行的基本单位。例如,用户运行自己的程序,系统就创建一个进程,并为它分配资源,包括各种表格、内存空间、磁盘空间、I/O设备等。然后,把该进程放人进程的就绪队列。进程调度程序选中它,为它分配CPU以及其它有关资源,该进程才真正运行。所以,进程是系统中的并发执行的单位。如下图所示,在 windows 中通过查看任务管理器的方式,我们就可以清楚看到 window 当前运行的进程(.exe文件的运行)。
云深i不知处
2020/09/16
4620
线程的创建
1. 定义Thread类的子类,并重写该类的run()方法,该run()方法的方法体就代表了线程需要完成的任务。
黑洞代码
2021/01/14
6970
线程的创建
线程池的创建和使用
这里需要注意,线程的数量是固定的,但是队列大小是无界的(Integer.MAX_VALUE足够大,大到可以任务无界。)
IT云清
2019/01/22
1.1K0
线程的创建释放与使用
TerminateThread(m_hThreadHandle,0); // 线程句柄
ClearSeve
2022/02/11
6120
线程的创建
创建一个Java线程常见的有两种方式: 1.继承Thread类 两种表示方法: (1).外部类 import java.util.Date; public class Test1 { public static void main(String[] args) { //启动新线程 来完成输出时间的操作 Mytime mt=new Mytime(); //启动新线程 Thread的start() mt.
汤高
2018/01/11
9690

相似问题

WPF带Join()线程阻止UI线程

13

如何在主线程上处理大型全局对象时不阻止工作线程中的主UI线程

14

在没有.join()和不阻塞主线程的情况下清理线程

20

为什么pthread_join不阻止并等待线程完成?

25

NSURLConnection是否阻止主/UI线程

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文