子线程是在主线程之外创建的线程。与主线程相比,子线程通常用于执行耗时的任务,以避免阻塞主线程的运行。子线程可以同时运行多个,并且可以进行多任务处理。
子线程的运行状态包括:新建状态、就绪状态、运行状态、阻塞状态和死亡状态。子线程的启动可以通过start()方法来实现,并且可以通过调用join()方法等待子线程的完成。 子线程与主线程之间可以通过共享内存或消息传递的方式进行通信。共享内存可以使用共享的变量进行数据交换,但需要注意线程安全性,线程间通讯在Qt中绝大部分都是采用信号与槽机制来实现,减少系统的耦合度。消息传递可以通过队列等方式实现,不同线程之间通过发送和接收消息来实现通信。
优点:子线程的使用可以提高程序的并发性,充分利用多核处理器的性能。
缺点:但需要注意子线程的创建和销毁等开销,以及正确处理共享数据和线程同步的问题,以避免出现线程安全性问题。
Qt应用:
步骤【1】头文件声明①或者直接在源文件中声明②:
①
②
步骤【2】源文件 新建线程和工作对象:
以下是主线程和子线程的示意图。
中断是指在一个线程执行过程中,通过发送一个中断信号来请求线程停止正在执行的任务,从而提高程序的可控性和响应性。线程在收到中断信号后可以根据具体情况选择如何处理中断,比如立即停止任务、继续执行、或者在合适的时机进行退出,这与中断的优先级设置有关。
当一个线程被中断时,如果线程处于等待或睡眠状态,那么它会立即结束等待或睡眠,并且抛出InterruptedException异常。如果线程处于运行状态,那么它可以根据具体情况自行选择如何处理中断,例如停止任务、继续执行,或者在合适的时机完成后退出。 在处理中断时,应该注意线程安全性和数据一致性。可以使用标志位或volatile变量来实现线程间的通信,以便于检查中断状态。同时,可以使用synchronized关键字或Lock对象来保证数据一致性,并避免出现竞态条件等问题。
优点:中断机制是一种优雅且灵活的线程控制方式,能够实现线程的可控性和响应性。在编写多线程程序时,应充分考虑中断的使用,以便提高程序的健壮性和可维护性。
缺点:①中断过多且设置混乱,会导致程序崩溃。②可能导致资源泄漏,当某线程在等待某个资源时被中断,如果没有正确处理中断,可能会导致该资源一直被占用,从而引发资源泄漏的问题。③可能引起死锁:在多线程编程中,如果线程在等待某个锁的时候被中断,而没有正确处理中断,可能会导致产生死锁的情况。④可能导致性能下降:中断操作本身会带来一定的开销,如果频繁地使用中断,可能会降低程序的性能。因此,在设计使用中断的线程时,需要权衡中断的使用频率和性能之间的平衡。⑤可能引发安全问题:如果线程在处理中断时,没有正确处理共享数据和线程同步,可能会导致出现线程安全性问题,如竞态条件、数据不一致等。按照中断设置规则办事,弄清楚中断的运行规则,是正确高效使用中断的前提。
C/C++应用:中断初始化(触发方式、抢占优先级、响应优先级、中断线配置、有的需要IO口配置等等)+编写中断服务函数(管理好中断标志)
下面是以按键触发中断来示意中断运行的过程。
中断与子线程
相同:
- 多线程编程相关的概念,用于提高程序的并发性和响应性。
不同:
- 定义不同:中断是一种线程控制机制,用于请求线程停止正在执行的任务;子线程是指在主线程之外创建的线程,用于执行耗时的任务,以避免阻塞主线程的运行。
- 使用不同:中断通过调用Thread类的interrupt()方法来发出中断信号;子线程可以通过继承Thread类或实现Runnable接口来创建,并通过调用start()方法来启动。(这里是以Qt中为例的)
- 处理不同:线程收到中断信号后可以根据具体情况选择如何处理中断,可以立即停止任务、继续执行,或者在合适的时机退出;子线程的运行状态有新建、就绪、运行、阻塞和死亡状态,可以通过调用join()方法等待子线程的完成。
- 目标不同:中断是针对具体线程的,可以对特定线程发出中断信号;子线程是主线程的一个执行单位,创建的子线程可以并发执行多个任务。