我怎样才能毫无例外地中断这个警报?

     2023-02-25     20

关键词:

【中文标题】我怎样才能毫无例外地中断这个警报?【英文标题】:How can I interrupt this alarm without exceptions? 【发布时间】:2011-07-22 16:42:52 【问题描述】:

我有一个闹钟,它会在特定时间播放声音。我正在寻找一种方法来阻止它运行,我该怎么做?

这是我的闹钟代码:

        waiter = new Thread(new Runnable() 
        public void run() 
            while (Thread.currentThread() == waiter) 
                Calendar d = Calendar.getInstance();
                if (getAlarmHours() == d.get(Calendar.HOUR_OF_DAY)) 
                    if (getAlarmMinutes() == d.get(Calendar.MINUTE)) 
                        UserInterface
                        .setAlarmText("no alarms");
                        playSound.play();
                        isSoundPlaying = true;

                        break;

                    

                

            
        
    );

我想再次使用闹钟,如果我能提供任何关于我可能出错的地方的建议,我将不胜感激。如果我使用wait(),我怎样才能在没有异常的情况下通知?

【问题讨论】:

这段代码在触发前会消耗 100% 的 cpu。我建议您在两次检查之间至少睡一秒钟。 你是对的,谢谢..每当我运行程序时,我的电脑开始滞后..再次感谢!我现在做一些改变 你应该看看你的while循环中的条件。启动线程后,它可能永远不会结束。顺便说一句:我从未见过这种构造,也不知道它在运行时的行为。 几乎删除了这个问题。请记下我的编辑。通过在 Stack Overflow 上提问,您正在向比您有更多经验的同行寻求帮助。尽量大写应该是的单词,同时避免像“想要”这样的“文字说话”。像对待专业人士一样对待我们,您会得到专业人士的答案。 【参考方案1】:
waiter.interrupt();

另外,在你的 while 循环中,可以放一个 Thread.sleep(100);

【讨论】:

【参考方案2】:

我写了一些虚构的代码,应该会有所帮助。 code 如果您愿意,您可以修改解决方案以使其看起来像您的程序

【讨论】:

您的boolean 标志必须是volatile。话虽如此,为什么不直接使用while(!Thread.currentThread().isInterrupted()) 作为循环条件,当你想终止线程时,发出interrupt()【参考方案3】:

考虑将代码从一段时间移动到某种形式的计时器。

一些常见的建议是在 JVM 中构建 Timer 类或 Quartz 这是 Terracotta 的第 3 方库。

使用标准JVM选项的警报问题

Timer timer = new Timer();
//Start the alarm now, change the date object to your specific time
timer.schedule(new AlarmTimerTask(), new Date(System.currentTimeMillis()));

你的 AlarmTimerTask 类将是

public class AlarmTimerTask extends TimerTask 
  public void run()
     //Do something
  

如果您在任何时候想要删除计时器(将其关闭或应用程序正在关闭),请致电 timer.cancel() 以删除任务。

Quartz将为您提供添加的功能和良好的库来学习

编辑:我应该指出,如果您将 AlarmTimerTask 类分配给它自己的变量,而不是在 schedule() 方法中对其进行初始化,您也可以在单个任务上调用 cancel(),而不仅仅是 Timer

【讨论】:

听起来很有趣,我想我会用它,听起来更容易......谢谢男人

我怎样才能正确地评价这个 PHP 代码? [关闭]

】我怎样才能正确地评价这个PHP代码?[关闭]【英文标题】:HowcanIproperlyoutcommentthisPHPcode?[closed]【发布时间】:2013-03-2223:46:47【问题描述】:我有这个代码:<?phpdo_action(\'twentytwelve_credits\');?><ahref="<?phpechoesc_url(__(\'http://wo... 查看详情

ADC 中断正在干扰 STM32 上的 while(1) 循环。我怎样才能解决这个问题?

】ADC中断正在干扰STM32上的while(1)循环。我怎样才能解决这个问题?【英文标题】:ADCinterruptisinterferingwithwhile(1)looponSTM32.HowcanIfixthis?【发布时间】:2020-06-1700:46:15【问题描述】:我正在开发STM32F303并使用STM32CubeIDE进行编码。我正... 查看详情

我怎样才能更好地将这个按钮与中间的内容对齐?对我来说似乎偏离了中心:

】我怎样才能更好地将这个按钮与中间的内容对齐?对我来说似乎偏离了中心:【英文标题】:HowcanIlineupthisbuttonbetterwiththecontentinthemiddle?Itseemsoffcentertome:【发布时间】:2022-01-2310:19:54【问题描述】:按钮本身的margin-top可能是答... 查看详情

我怎样才能有效地做到这一点? [关闭]

】我怎样才能有效地做到这一点?[关闭]【英文标题】:HowcanIdothiseffectively?[closed]【发布时间】:2020-08-0122:06:06【问题描述】:这个问题:输入:123456结果:1+2+3+4+5+6=212+1=3返回:3这是我的代码:num=input()print(sum(list(map(int,list(num))... 查看详情

我怎样才能正确地让 SKLabelNode 跟随物理的身体?

】我怎样才能正确地让SKLabelNode跟随物理的身体?【英文标题】:HowcanIproperlymakeaSKLabelNodefollowabodywithPhysics?【发布时间】:2020-01-1523:42:46【问题描述】:我创建了一个行为非常简单的类:这个类的每个对象都是一个顶部有名字的... 查看详情

我怎样才能拥有一个完全透明的 UIAlertView?

】我怎样才能拥有一个完全透明的UIAlertView?【英文标题】:howcanIhaveatotallytransparentUIAlertView?【发布时间】:2012-09-0307:17:34【问题描述】:我需要一个UIALertView,它在弹出时应该足够透明,以便以褪色的方式显示alertview后面的背... 查看详情

我怎样才能简单地使用这种数字格式验证正则表达式?

】我怎样才能简单地使用这种数字格式验证正则表达式?【英文标题】:HowcanIsimplythisnumberformatvalidationregex?【发布时间】:2012-10-2916:48:32【问题描述】:所以,我有这个if语句:if(String(val).search(/^((\\d+(((\\,\\d3,)+)?)(\\.\\d+)?)|(\\.\\d+)... 查看详情

我怎样才能使这个动画更流畅?

】我怎样才能使这个动画更流畅?【英文标题】:HowcanImakethisanimationsmoother?【发布时间】:2014-08-0721:43:49【问题描述】:我有一个小plnkr,我用它来玩AngularJS和ngAnimate。我现在正在学习css3转换和转换。折叠/展开动画看起来很酷... 查看详情

我怎样才能提高这个网站的性能? [关闭]

】我怎样才能提高这个网站的性能?[关闭]【英文标题】:Howcaniimprovethiswebsiteperformance?[closed]【发布时间】:2016-04-0618:16:03【问题描述】:这是我第一次在***上提问。我想知道是否有人(在网页设计方面比我更有经验,但这很容... 查看详情

我收到一个带有纬度和经度的回调,我怎样才能最好地计算“当前速度”和其他派生值?

】我收到一个带有纬度和经度的回调,我怎样才能最好地计算“当前速度”和其他派生值?【英文标题】:I\'mgettingacallbackwithlatitudeandlongitude,howcanIbestcalculate"currentspeed",andotherderivedvalues?【发布时间】:2010-01-2213:53:32【问... 查看详情

我怎样才能有效地洗牌?

】我怎样才能有效地洗牌?【英文标题】:HowcanIshufflebitsefficiently?【发布时间】:2014-11-0305:48:32【问题描述】:我需要对一个16位无符号整数进行洗牌,使偶数索引位于低字节,奇数索引位于高字节。input:fedcba9876543210(contiguouslynu... 查看详情

Prisma:我怎样才能让所有孩子都处于某种状态?

】Prisma:我怎样才能让所有孩子都处于某种状态?【英文标题】:Prisma:howcanIgetallchildrenonacondition?【发布时间】:2021-12-1704:58:59【问题描述】:我正在尝试在多对多表(引用自身)上使用prisma,这样一行将有孩子和孙子我可以毫... 查看详情

React:我怎样才能让这个 React 组件写得更好更高效?

】React:我怎样才能让这个React组件写得更好更高效?【英文标题】:React:HowcanImakethisReactComponentwrittenbettertobemoreefficient?【发布时间】:2021-11-0617:04:08【问题描述】:我觉得我在重复onIncrement中的代码,并且可以更好地重构它。max... 查看详情

中断简介

...中断是计算机中的一个十分重要的概念,在现代计算机中毫无例外地都采用中断机制。在计算机执行程序的过程中,由于出现某个特殊情况(或称为"事件"),使得CPU中止现行程序,而转去执行处理该事件的处理程序(俗称中断... 查看详情

我怎样才能正确地进行非主动/主动约束?

】我怎样才能正确地进行非主动/主动约束?【英文标题】:Howcanidoproperlydeactive/activeconstraint?【发布时间】:2018-06-1110:19:09【问题描述】:我有一个视图,我需要切换哪两个约束。我添加了以下约束chatHalfLeadingConstraint=[NSLayoutConst... 查看详情

我怎样才能让 2 个 wavefilereader 依次播放?

】我怎样才能让2个wavefilereader依次播放?【英文标题】:Howcaniget2wavefilereaderstoplaysequencially?【发布时间】:2010-01-1113:07:11【问题描述】:我正在尝试播放一组通过网络发送的音频wav文件,以作为整体声音流播放。如何使用NAudio让... 查看详情

我怎样才能准确地找到我的代码签名身份是啥?

】我怎样才能准确地找到我的代码签名身份是啥?【英文标题】:HowcanIfindexactlywhatmycodesignidentityis?我怎样才能准确地找到我的代码签名身份是什么?【发布时间】:2013-05-1016:52:27【问题描述】:我需要确切地知道我的代码签名... 查看详情

我怎样才能更好地存储变量?

】我怎样才能更好地存储变量?【英文标题】:HowcouldIstorethevariablesbetter?【发布时间】:2013-01-1305:32:12【问题描述】:这是我小组的项目:https://github.com/stuycs-ml7-projects/YAN-SHAN-PHAN-WU我们正在开发可以使用GPS将消息存储在位置的... 查看详情