免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4921 | 回复: 1
打印 上一主题 下一主题

windows下如何实现精确控制暂停恢复子线程 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-10-27 14:14 |只看该作者 |倒序浏览
在不修改工程子线程代码的情况下,主线程有没有什么办法可以直接暂停恢复子线程

用的是windows + python2.5 + pyqt,子线程用的是qthread类


qthread的sleep好像不太好用,精度太低了


windows api里有一个暂停和恢复线程用的api能不能用来控制子线程,如果能用该如何查找子线程的句柄

论坛徽章:
4
CU大牛徽章
日期:2013-03-13 15:29:07CU大牛徽章
日期:2013-03-13 15:29:49CU大牛徽章
日期:2013-03-13 15:30:192015亚冠之广州恒大
日期:2015-07-22 17:20:15
2 [报告]
发表于 2011-10-28 17:50 |只看该作者
本帖最后由 ghostwwl 于 2011-10-28 18:08 编辑

废话不说 这是我08年的时候的代码 翻到的

  1. #!/usr/bin/env python
  2. #-*- coding: utf-8 -*-

  3. #****************************************************
  4. #  FileName: GThread.py
  5. #  Author: ghostwwl
  6. #  Note:
  7. #    2008.10 add states and add Class_Timer
  8. #****************************************************

  9. import time
  10. import threading
  11. from timeit import default_timer

  12. __author__ = "ghostwwl (ghostwwl@gmail.com)"
  13. __version__ = "1.0"

  14. #-------------------------------------------------------------------------------
  15. class Thread_Control(object):
  16.     '''The Control Class'''
  17.     def __init__(self):
  18.         self.ControlEvent = threading.Event()
  19.         self.ControlEvent.set()
  20.         self.TimeOut = None
  21.         self.Terminated = False
  22.         self.CStateInfo = {-1:'STOP', 0:'READY', 1:'RUNNING', 2:'PAUSE'}
  23.         self.CSTATES = 0
  24.    
  25.     def stop(self):
  26.         self.CSTATES = -1
  27.         print 'WARNING %s] Stopping Thread %-30s [ OK ]' % (time.strftime("%Y-%m-%d %H:%M:%S"),
  28.                                                              self.getName())
  29.         self.Terminated = True
  30.         
  31.     def pause(self, TimeOut = None):
  32.         self.TimeOut = TimeOut
  33.         self.ControlEvent.clear()
  34.         self.CSTATES = 2
  35.         
  36.     def restore(self):
  37.         self.ControlEvent.set()

  38. #-------------------------------------------------------------------------------
  39. class mythread(threading.Thread, Thread_Control):
  40.     '''
  41.     BaseThread Class With Control Method[stop, pause, restore]
  42.     time dilution of precision about 1 millisecond
  43.     thread state {-1:'STOP', 0:'READY', 1:'RUNNING', 2:'PAUSE'}
  44.     '''
  45.    
  46.     def __init__(self, owner, ThreadName, TimeSpacing=0, TimeDelay = 0):
  47.         '''
  48.         __init__(self, owner, ThreadName, TimeSpacing=0)
  49.         owner         The Thread Owner
  50.         ThreadName    The Thread Name
  51.         TimeSpacing   Run TimeSpacing
  52.         TimeDelay     The Thread Start TimeDelay
  53.         '''
  54.         self.owner = owner
  55.         self.TimeSpacing = TimeSpacing #任务多长时间执行一次
  56.         self.TimeDelay = TimeDelay
  57.         Thread_Control.__init__(self)
  58.         threading.Thread.__init__(self, name = ThreadName)
  59.         self.setDaemon(1)
  60.         
  61.     def run(self):
  62.         '''
  63.         This While loop stop until Terminated
  64.         This Object Has sotp, pause(timeout = None) and restore method
  65.         '''
  66.         if self.TimeDelay != 0:
  67.             TSTART = self.TimeDelay
  68.         else:
  69.             TSTART = 0
  70.         while 1:
  71.             try:
  72.                 #这里是线程的停止处理
  73.                 if self.Terminated:
  74.                     break
  75.                
  76.                 #这里是线程的暂停处理
  77.                 if self.TimeOut is not None:
  78.                     #带有暂停超时的处理
  79.                     self.ControlEvent.wait(self.TimeOut)
  80.                     self.TimeOut = None
  81.                     self.ControlEvent.set()
  82.                 else:
  83.                     #不带超时 那么必须等到线程恢复
  84.                     self.ControlEvent.wait()
  85.                
  86.                 CUR_TIMING = default_timer()
  87.                 if CUR_TIMING - TSTART > self.TimeSpacing:
  88.                     TSTART = CUR_TIMING
  89.                     #这个才是我们的工作函数
  90.                     self.CSTATES = 1
  91.                     self.handle()
  92.                     
  93.                 time.sleep(0.001) #暂停1毫秒 防止空跑占用过高cpu
  94.             except Exception, e:
  95.                 print "ERROR %s] %s Error: %s" % (time.strftime("%H:%M:%S"), self.getName(), str(e))
  96.    
  97.     def handle(self):
  98.         '''The Real Work Function'''
  99.         pass
  100.    
  101.     def getstate(self):
  102.         '''check the thread state'''
  103.         return self.CSTATES
  104.    
  105.     def getstatemsg(self):
  106.         return self.CStateInfo[self.CSTATES]


复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP