多线程中中断未执行完的线程

zfybs 2014-10-20 03:21:27
csdn上的大神实在是太多了,在提问前,先表达一下赞叹。
我的问题很简单:假如我有一个滚动条,在其滚动的时候不断的触发scroll事件,而此事件对应的方法的执行时间较长的话,我该如何在每次scroll事件的开始的时候就中断前面没做完的,然后重新开始做呢?
...全文
353 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
csdn0250 2014-10-29
  • 打赏
  • 举报
回复
引用 6 楼 zfybs 的回复:
[quote=引用 4 楼 wuyazhe 的回复:]
dim running as boolean = true
public sub ThreadProcduce()
    'your code line...
    'your code line...
     if not running then exit sub
    'your code line...
    'your code line...
     if not running then exit sub
    'your code line...
    'your code line...
end sub
exit sub退出后这个线程就自动结束了?如果结束了那我对这个线程对象还能直接再start吗?还是得要再新开线程?也就是说,exit sub对线程而执行的是什么操作? [/quote] (仅供参考,我也是新人)不放心就加标志位判断,如果SUB退出,标志位置位,然后退出线程
zfybs 2014-10-21
  • 打赏
  • 举报
回复
exit sub退出后这个线程就自动结束了?如果结束了那我对这个线程对象还能直接再start吗?还是得要再新开线程?也就是说,exit sub对线程而执行的是什么操作?
兔子-顾问 2014-10-21
  • 打赏
  • 举报
回复
dim running as boolean = true
public sub ThreadProcduce()
    'your code line...
    'your code line...
     if not running then exit sub
    'your code line...
    'your code line...
     if not running then exit sub
    'your code line...
    'your code line...
end sub
zfybs 2014-10-21
  • 打赏
  • 举报
回复
引用 4 楼 wuyazhe 的回复:
dim running as boolean = true
public sub ThreadProcduce()
    'your code line...
    'your code line...
     if not running then exit sub
    'your code line...
    'your code line...
     if not running then exit sub
    'your code line...
    'your code line...
end sub
exit sub退出后这个线程就自动结束了?如果结束了那我对这个线程对象还能直接再start吗?还是得要再新开线程?也就是说,exit sub对线程而执行的是什么操作?
zfybs 2014-10-20
  • 打赏
  • 举报
回复
引用 1 楼 wuyazhe 的回复:
首先你之前的方法需要是用独立线程来做的,如果你温柔一点呢,可以执行过程中多增加一些监测点,如果要终止,则设置标记退出,不继续执行。如果要暴力一点,就Abort线程。
“则设置标记退出,不继续执行。”是怎么退出?在方法内部用sleep或者检测当前线程后将其abort?
winnowc 2014-10-20
  • 打赏
  • 举报
回复
如果响应是在UI线程的执行的,本来就会阻塞UI线程,程序也没法继续处理新的消息。(当然可能响应过程中会因为处理消息循环而导致响应方法重入) 如果那个响应的方法是自己控制的别的线程里执行的,粗暴的办法就是Abort掉线程。但是这样可能会导致新建线程的开销比较大。 优雅点的方案是使用一个计数器,每次事件触发的时候先把计数器+1,然后用task把响应方法放到其它线程执行(一般会使用线程池,如果有UI相关代码需要再invoke调度回UI线程),响应开始的时候记录当前计数器的值,然后响应的过程中在多个可能比较慢的操作之前检查记录的值和计数器当前的值是否一致,不一致就返回,放弃这次响应。 如果这个处理是系统很重要的一部分,用task默认的线程调度不够理想,也可以自己实现调度,这样可以自己控制工作线程的数量和生命周期,比如调度器监视当一个已经无效的任务过了一段时间还没有停止,可以粗暴Abort掉,然后重建线程。
兔子-顾问 2014-10-20
  • 打赏
  • 举报
回复
首先你之前的方法需要是用独立线程来做的,如果你温柔一点呢,可以执行过程中多增加一些监测点,如果要终止,则设置标记退出,不继续执行。如果要暴力一点,就Abort线程。

16,553

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧