使用handler实现无限循环

不适用线程开启循环,并可以刷新界面

public class MyHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        switch (msg.what) {
            case 1:
                Log.i("after", "循环中");
                myHandler.sendEmptyMessageDelayed(1, 500);

                break;
            case 2:
                Log.i("after", "停止循环");
                myHandler.removeMessages(1);//移除循环信息
                break;
            default:
                break;
        }
    }
}
myHandler = new MyHandler();

btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (!isRUnning) { myHandler.sendEmptyMessage(1); btn.setText("停止"); isRUnning = true; } else {// myHandler.removeMessages(1); myHandler.sendEmptyMessage(2); btn.setText("开始"); isRUnning = false; } } });

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用一个while循环语句和一个signal handler实现这个功能。在while循环中无限执行一些代码,如写入"line"到log.txt文件中。当用户取消脚本运行时,signal handler会捕捉到异常信号并终止脚本执行。 下面是一个示例代码: ```tcl # 定义 signal handler proc interrupt_handler {sig} { puts "Script interrupted by user" # 在此处添加需要执行的代码 exit 1 } # 注册 signal handler foreach sig {INT TERM} { if {[catch {signal $sig interrupt_handler}] != 0} { puts "Failed to register signal handler for $sig" exit 1 } } # 打开 log.txt 文件 set fp [open "log.txt" w] # 无限循环语句 set i 0 while {1} { set i [expr {$i+1}] puts $fp "line $i" puts "line $i" # 在此处添加需要执行的代码 } # 关闭 log.txt 文件 close $fp ``` 在这个示例代码中,我们首先定义了一个interrupt_handler函数作为signal handler,并使用signal命令注册了两个异常信号INT和TERM,并将它们与interrupt_handler函数关联起来。然后,我们打开log.txt文件,并使用一个无限循环语句,不断向文件中写入"line"字符串,并在控制台输出。 当用户取消脚本运行时,signal handler会捕捉到异常信号并执行相应的代码,包括关闭log.txt文件。这样可以保证文件不会因为脚本异常退出而导致数据丢失。 请注意,这个示例代码中的无限循环语句会一直执行下去,因此你需要手动在vivado界面中取消脚本运行。如果你希望在一定条件下自动退出循环,可以在while循环中加入相应的判断语句。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值