TC官方合作论坛

 找回密码
 立即注册
查看: 1727|回复: 7

[问题] 线程停止后的句柄问题

[复制链接]
发表于 2015-8-5 12:08:53 | 显示全部楼层 |阅读模式

马上加入TC

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 xiaoqix 于 2015-8-5 12:33 编辑
  1. 变量 线程ID
  2. 功能 启动_热键()
  3.     //启动热键
  4.     调试输出(线程ID)
  5.     如果(线程ID == 0)
  6.         设置托盘气泡("开始运行","提示")
  7.         线程ID=线程开启("主程序","")
  8.     否则
  9.         设置托盘气泡("请不要重复按启动键","提示")
  10.     结束
  11.     调试输出("线程:"&线程ID)
  12. 结束
  13. 主程序()
  14.         调试输出("主程序"&线程ID)
  15.         线程关闭(线程ID)
  16.         线程ID = 0  
  17.     结束
  18. 结束
复制代码
有个疑问
当主程序内 执行了 线程关闭后,我把线程句柄 赋值为0
但是发现,线程停止后,那句负值 因为前面的停止而不执行
然后再按启动的时候 此线程句柄 居然还存在里面,没有变化,也不是0
请问线程停止命令 运行后,怎么把句柄变成0呢
另外想问下,如果 不给他变成0
当运行了 停止线程后,这个线程还在后台存在运行吗,会不会占用资源?(这个线程停止的命令  感觉像是线程暂停?)

关于句柄赋值 我有个备选方案,就是用读写配置来确定句柄
但是 目前闹不明白,这个线程句柄直接在里面赋值为0后为什么 没有变成0?

  1. 功能 终止_热键()
  2.     调试输出(线程ID)
  3.     如果(线程ID != 0)
  4.         线程关闭(线程ID)
  5.         线程ID = 0        
  6.     结束   
  7.     调试输出(线程ID)
  8. 结束
复制代码


如果用热键停止的方式,按下热键后,调试输出的显示句柄为0
我如果直接在程序内 调用  功能 终止_热键() 而不是去手动按下热键
线程会停止,但是线程句柄不会变成0

回复

使用道具 举报

发表于 2015-8-5 12:33:00 | 显示全部楼层
逻辑的问题,自己把自己结束了,当然就不往下执行了,所以没法赋值,你需要用另一个来结束这一个就不会受影响了
回复 支持 反对

使用道具 举报

发表于 2015-8-5 12:33:54 | 显示全部楼层
你都把自己给关了,就不会运行到后面那句线程ID=0那里了,也就是说后面那句你是白写的了,不会生效的
回复 支持 反对

使用道具 举报

发表于 2015-8-5 12:34:45 | 显示全部楼层
你可以另外设置个热键,关闭线程并且修改线程ID的变量名
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-5 12:37:16 | 显示全部楼层
言术 发表于 2015-8-5 12:33
逻辑的问题,自己把自己结束了,当然就不往下执行了,所以没法赋值,你需要用另一个来结束这一个就不会受影 ...

我补充了一下
把停止线程 放到热键里面,就能执行

可以理解为这个热键是单独的程序吗

我想问下,如果这个逻辑是对的
我在主线程里开启一个新线程,使用新线程来关闭此前的这个主线程,会不会 两个线程同时关闭掉呢

另外这个线程 关闭后,那个句柄 还在,会不会影响程序,会不会占用资源呢
回复 支持 反对

使用道具 举报

发表于 2015-8-5 12:41:20 | 显示全部楼层
  1. 变量 线程ID

  2. 功能 启动_热键()
  3.     //启动热键
  4.     调试输出(线程ID)
  5.     如果(线程ID == 0)
  6.         设置托盘气泡("开始运行","提示")
  7.         线程ID=线程开启("主程序","")
  8.     否则
  9.         设置托盘气泡("请不要重复按启动键","提示")
  10.     结束
  11.     调试输出("线程:"&线程ID)
  12. 结束

  13. 功能 启动_热键2()
  14.     调试输出("主程序"&线程ID)
  15.     线程关闭(线程ID)
  16.     线程ID = 0  
  17. 结束

  18. 功能 主程序()
  19.     //..............
  20. 结束
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-5 12:55:26 | 显示全部楼层

刚才可能你回帖的时候 我刚好发帖!~
这个方法我知道,后面我做了补充
我想问下,线程停止后,不把句柄变成0,他应该不会占资源吧
因为之前都是用读写配置的方式 来确定句柄 和修改句柄0
但是感觉 我是不是 多此一举了,看有其他好的方式没
回复 支持 反对

使用道具 举报

发表于 2015-9-17 17:25:47 | 显示全部楼层
这个好办
  1. 主程序()

  2. 调试输出("主程序"&线程ID)
  3. 变量 强迫症专用 = 线程ID
  4.         线程ID = 0  
  5.       线程关闭(强迫症专用)
  6. 17.    结束
复制代码

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

小黑屋|TC官方合作论坛 (苏ICP备18045623号)

GMT+8, 2024-10-2 15:12 , Processed in 0.039899 second(s), 23 queries .

Powered by 海安简单软件服务部

© 2008-2019 版权所有 保留所有权利

快速回复 返回顶部 返回列表