C#线程调度问题

问题描述

现在我有一个需求:主界面中有一个按钮button,点击该按钮,开始朗读主界面从串口获取到的数据,当串口中的某一个标志位发生变化(比如说,飞机目前空速异常,高度异常或者其他状态异常),则播报的常规内容马上停止,并开始玄幻播报异常的警告内容,直到警告解除.同时飞机也有一些状态的改变,比如说开伞起飞降落等状态,当从串口中得到这些状态的时候,这时候主界面打断当前播报的常规内容,播报事件状态(一次)对于常规播报内容警告播报内容事件播报内容,分别开启一个线程,这三个线程的作用仅仅是播报在主界面的开始播报的按钮添加一个Click事件,点击之后,会开启一个线程,这个线程用于判断标志位的变化,根据标志位的变化决定开启3个播报线程中的某一个(相当于用这个线程来对上述3个播报线程的调度),这个调度主要是3个线程的播报以及暂停语音播报,采用的微软自带的SpeechSynthesis的程序集进行开发我这种想法不知道,是不是正确?因为,我在编写代码的过程中,感觉控制非常复杂,以及根据状态的变化来决定某一个线程的恢复和暂停这个问题,困扰我快1周多了,一直没有得到解决

解决方案

解决方案二:
你不要把所有的事情都放到线程上去整,你用线程无非就是while(true),线程一般用在长时间执行的方法上,你这里的播报停止,与开始只是是瞬间完成的一个状态开关而已,还不如用一个计时器Timer来处理这样你也好控制,
解决方案三:
能用一个线程来做的事情,不要用3个线程来做你线程要做的工作无非就是朗读文字,3个线程其实完全一样的功能,只不过朗读的文字不一样罢了最简单的办法,反正它也是一个字一个字读,根本不认识什么词组.你做个循环,每次读一个字,这样状态变化了就可以随时停下来,跳出循环,然后重新执行方法,传入新的字符串

时间: 2024-09-30 00:31:28

C#线程调度问题的相关文章

性能-安卓环境线程调度问题

问题描述 安卓环境线程调度问题 在安卓手机上有两个进程a.b都用SCHED_RR方式创建线程,优先级一样,进程a.b都会对某个pty设备进行读操作,操作逻辑一致,一开始的线程过程函数如下: loop() { while(1) { read() ... 一大块处理代码 } } 功能.性能调好后为了优化代码,考虑a.b两者对该pty设备的操作线程都是上面的形式,可以将while(1)中的一大块代码抽象成一个函数调用,所以过程函数的 实现变成下面这样: handler() { read() ... 一

基于 JVMTI 实现 Java 线程的监控(转)

随着多核 CPU 的日益普及,越来越多的 Java 应用程序使用多线程并行计算来充分发挥整个系统的性能.多线程的使用也给应用程序开发人员带来了巨大的挑战,不正确地使用多线程可能造成线程死锁或资源竞争,导致系统瘫痪.因此,需要一种运行时线程监控工具来帮助开发人员诊断和跟踪 Java 线程状态的切换.JDK 1.5 及其后续版本提供了监控虚拟机运行状态的接口 JVMTI.本文深入分析了 JVM 中的 Java 线程模型,设计了用于监控线程状态切换的模型,并基于 JVMTI 实现了对 Java 线程切

RxJava源码初探

一.前言 RxJava是用java实现的ReactiveX(Reactive Extensions)框架开源库.ReactiveX则是大名鼎鼎的响应式编程.而响应式编程和观察者模式紧紧的相关联.在看RxJava的源码中,分析起来会有点麻烦,所以才有了这篇文章,和对这个有兴趣的同学一起窥探一二. 二.观察者模式 2.1 基本原理 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式即让多个观察者对象同时监听某一个主题对象.这个主题对象在状态上发生变化时,会通知所有观

Android(Java)利用findbugs进行代码静态检查

本文主要介绍利用java静态代码检查工具findbugs进行代码检查,包括其作用.安装.使用.高级功能(远程review和bug同步). 虽然Android提供了Test Project工程以及instrumentation可以方便的进行单元测试,不过据了解国内Android开发会写自测代码的寥寥无几.那么有没有简单的方法一定程度上保证代码质量呢.Android应用开发大多使用Java,所以对于Java代码检查工具都可以适用,本文介绍其中功能较为强大的findbugs. 1.findbugs作用

c++11标准库thread的问题

问题描述 c++11标准库thread的问题 上面的代码我是想实现简单的操作系统中的线程调度问题.可是出现这样的输出结果,这是为什么?我打印的字符串不是我对应数组中字符串,这和thread什么有关? 解决方案 我这里给每个线程分配的参数不知道为什么变成了一样的 解决方案二: 先看线程函数传递的参数是否都是一样的.然后就是线程函数中是否都是相同

RxAndroid 中文教程

本文讲的是RxAndroid 中文教程, 如果你是新人,你可能会想订阅我的 RSS 流,或者关注我的 Twitter.感谢阅读! 有人曾说,我们一生都应去追求积极主动的处事方式,而不是响应式.然而,这种思想并不适用开发 Android 程序.:] 响应式编程并不仅是另外一套 API 规范.它是一种全新的并且非常有用的代码规范."RxJava" 是一个能在 Android 上使用的响应式编程的实现.Android 是一个开始探索响应式编程世界的极佳平台.尤其是使用 "RxAnd

Java线程机制(四) 同步方法和同步块

在之前例子的基础上,我们增加新的功能:根据正确与不正确的响应来显示玩家的分数. public class ScoreLabel extends JLabel implements CharacterListener { private volatile int score = 0; private int char2type = -1; private CharacterSource generator = null, typist = null; public ScoreLabel(Chara

进程、线程知识点总结和同步(消费者生产者,读者写者三类问题)、互斥、异步、并发、并行、死锁、活锁的总结

进程和程序: 进程:是个动态的概念,指的是一个静态的程序对某个数据集的一次运行活动,而程序是静态的概念,是由代码和数据组成的程序块而已. 进程5大特点:动态性,并发性,独立运行性,异步性,和结构化的特性. 在多道程序环境下,程序不能独立运行,操作系统所有的特征都是基于进程而体现的,只有进程可以在系统中运行,程序运行必须有进程才行.进程是操作系统里资源分配的基本单位,也是独立运行的基本单位,具有动态的特点,暂时出现的特点,而且一个进程产生之后,可以再次生成多个进程出来.也可以多个进程并发执行,也可

ASP中多线程的调度问题

问题描述 ASP中多线程的调度问题 C#多线程中,怎么实现一个线程执行完后才去执行另一个线程. ASP中我是用多个线程在后台获得数据,但是在这几个线程还没执行完,Page_Load就执行完了,所以页面上的数据也就时有时无,且不完全. 请问各位大神怎么解决! 解决方案 楼主看看能不能用异步去获取数据 解决方案二: 使用异步获取数据,执行结束后再显示到页面上: 或者用信号量,在Page_Load结束前等待读取数据操作