TC官方合作论坛

 找回密码
 立即注册
查看: 807|回复: 8

[已解决] 请教一个多线程的问题

[复制链接]
发表于 2014-2-28 15:27:30 | 显示全部楼层 |阅读模式

马上加入TC

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

x
各位好,我想做一个脚本,脚本内容:1 利用 Ctrl 1 至 Ctrl 8来启动8条线程

2 利用 Ctrl F1 至 Ctrl F8来关闭对于的线程
现在不知道为什么,按下热键却无法开启任何一条线程.请大家帮帮忙,看看怎么解决.
脚本代码如下:
  1. namespace test
  2. //全局变量声明:
  3. var main_pid=array[8],end_pid=array[8],dm=array[8]
  4. //窗口初始化:
  5. function init()   
  6.     //注册热键ctrl+1
  7.     hotkey.register("hotkey_1")
  8.     control.show("hotkey_1",false)
  9.     //注册热键ctrl+2
  10.     hotkey.register("hotkey_2")
  11.     control.show("hotkey_2",false)
  12.     //注册热键ctrl+3
  13.     hotkey.register("hotkey_3")
  14.     control.show("hotkey_3",false)
  15.     //注册热键ctrl+4
  16.     hotkey.register("hotkey_4")
  17.     control.show("hotkey_4",false)
  18.     //注册热键ctrl+5
  19.     hotkey.register("hotkey_5")
  20.     control.show("hotkey_5",false)
  21.     //注册热键ctrl+6
  22.     hotkey.register("hotkey_6")
  23.     control.show("hotkey_6",false)
  24.     //注册热键ctrl+7
  25.     hotkey.register("hotkey_7")
  26.     control.show("hotkey_7",false)
  27.     //注册热键ctrl+8
  28.     hotkey.register("hotkey_8")
  29.     control.show("hotkey_8",false)
  30.     //注册热键ctrl+F1
  31.     hotkey.register("hotkey_F1")
  32.     control.show("hotkey_F1",false)
  33.     //注册热键ctrl+F2
  34.     hotkey.register("hotkey_F2")
  35.     control.show("hotkey_F2",false)
  36.     //注册热键ctrl+F3
  37.     hotkey.register("hotkey_F3")
  38.     control.show("hotkey_F3",false)
  39.     //注册热键ctrl+F4
  40.     hotkey.register("hotkey_F4")
  41.     control.show("hotkey_F4",false)
  42.     //注册热键ctrl+F5
  43.     hotkey.register("hotkey_F5")
  44.     control.show("hotkey_F5",false)
  45.     //注册热键ctrl+F6
  46.     hotkey.register("hotkey_F6")
  47.     control.show("hotkey_F6",false)
  48.     //注册热键ctrl+F7
  49.     hotkey.register("hotkey_F7")
  50.     control.show("hotkey_F7",false)
  51.     //注册热键ctrl+F8
  52.     hotkey.register("hotkey_F8")
  53.     control.show("hotkey_F8",false)   
  54. endfunction
  55. //注册插件按钮
  56. function button1_click()
  57.     test.插件注册()
  58. endfunction
  59. //Ctrl+1注册线程1:
  60. function hotkey_1_onhotkey()
  61.     if(main_pid[0]==0)
  62.         main_pid[0]=thread.beginthreadex("test.main","0","test.end","0")
  63.     else
  64.         help.beep(1000,500)
  65.     endif
  66. endfunction
  67. //Ctrl+F1注销线程1:
  68. function hotkey_F1_onhotkey()
  69.     dm[0].UnBindWindow()
  70.     end_pid[0]=main_pid[0]
  71.     if(main_pid[0]!=0)
  72.         main_pid[0]=0     
  73.         help.sleep(1000)
  74.         thread.closethread(end_pid[0],0)
  75.     endif
  76. endfunction
  77. //Ctrl+2注册线程2:
  78. function hotkey_2_onhotkey()
  79.     if(main_pid[1]==0)
  80.         main_pid[1]=thread.beginthreadex("test.main","1","test.end","1")
  81.     else
  82.         help.beep(1000,500)
  83.     endif
  84. endfunction
  85. //Ctrl+F2注销线程2:
  86. function hotkey_F2_onhotkey()
  87.     dm[1].UnBindWindow()
  88.     end_pid[1]=main_pid[1]
  89.     if(main_pid[1]!=0)
  90.         main_pid[1]=0     
  91.         help.sleep(1000)
  92.         thread.closethread(end_pid[1],0)
  93.     endif
  94. endfunction
  95. //Ctrl+3注册线程3:
  96. function hotkey_3_onhotkey()
  97.     if(main_pid[2]==0)
  98.         main_pid[2]=thread.beginthreadex("test.main","2","test.end","2")
  99.     else
  100.         help.beep(1000,500)
  101.     endif
  102. endfunction
  103. //Ctrl+F3注销线程3:
  104. function hotkey_F3_onhotkey()
  105.     dm[2].UnBindWindow()
  106.     end_pid[2]=main_pid[2]
  107.     if(main_pid[2]!=0)
  108.         main_pid[2]=0     
  109.         help.sleep(1000)
  110.         thread.closethread(end_pid[2],0)
  111.     endif
  112. endfunction
  113. //Ctrl+4注册线程4:
  114. function hotkey_4_onhotkey()
  115.     if(main_pid[3]==0)
  116.         main_pid[3]=thread.beginthreadex("test.main","3","test.end","3")
  117.     else
  118.         help.beep(1000,500)
  119.     endif
  120. endfunction
  121. //Ctrl+F4注销线程4:
  122. function hotkey_F4_onhotkey()
  123.     dm[3].UnBindWindow()
  124.     end_pid[3]=main_pid[3]
  125.     if(main_pid[3]!=0)
  126.         main_pid[3]=0     
  127.         help.sleep(1000)
  128.         thread.closethread(end_pid[3],0)
  129.     endif
  130. endfunction
  131. //Ctrl+5注册线程5:
  132. function hotkey_5_onhotkey()
  133.     if(main_pid[4]==0)
  134.         main_pid[4]=thread.beginthreadex("test.main","4","test.end","4")
  135.     else
  136.         help.beep(1000,500)
  137.     endif
  138. endfunction
  139. //Ctrl+F5注销线程5:
  140. function hotkey_F5_onhotkey()
  141.     dm[4].UnBindWindow()
  142.     end_pid[4]=main_pid[4]
  143.     if(main_pid[4]!=0)
  144.         main_pid[4]=0     
  145.         help.sleep(1000)
  146.         thread.closethread(end_pid[4],0)
  147.     endif
  148. endfunction
  149. //Ctrl+6注册线程6:
  150. function hotkey_6_onhotkey()
  151.     if(main_pid[5]==0)
  152.         main_pid[5]=thread.beginthreadex("test.main","5","test.end","5")
  153.     else
  154.         help.beep(1000,500)
  155.     endif
  156. endfunction
  157. //Ctrl+F6注销线程6:
  158. function hotkey_F6_onhotkey()
  159.     dm[5].UnBindWindow()
  160.     end_pid[5]=main_pid[5]
  161.     if(main_pid[5]!=0)
  162.         main_pid[5]=0     
  163.         help.sleep(1000)
  164.         thread.closethread(end_pid[5],0)
  165.     endif
  166. endfunction
  167. //Ctrl+7注册线程7:
  168. function hotkey_7_onhotkey()
  169.     if(main_pid[6]==0)
  170.         main_pid[6]=thread.beginthreadex("test.main","6","test.end","6")
  171.     else
  172.         help.beep(1000,500)
  173.     endif
  174. endfunction
  175. //Ctrl+F7注销线程7:
  176. function hotkey_F7_onhotkey()
  177.     dm[6].UnBindWindow()
  178.     end_pid[6]=main_pid[6]
  179.     if(main_pid[6]!=0)
  180.         main_pid[6]=0     
  181.         help.sleep(1000)
  182.         thread.closethread(end_pid[6],0)
  183.     endif
  184. endfunction
  185. //Ctrl+8注册线程8:
  186. function hotkey_8_onhotkey()
  187.     if(main_pid[7]==0)
  188.         main_pid[7]=thread.beginthreadex("test.main","7","test.end","7")
  189.     else
  190.         help.beep(1000,500)
  191.     endif
  192. endfunction
  193. //Ctrl+F8注销线程8:
  194. function hotkey_F8_onhotkey()
  195.     dm[7].UnBindWindow()
  196.     end_pid[7]=main_pid[7]
  197.     if(main_pid[7]!=0)
  198.         main_pid[7]=0     
  199.         help.sleep(1000)
  200.         thread.closethread(end_pid[7],0)
  201.     endif
  202. endfunction
  203. //主程序流程:
  204. function main(hwnd_count)
  205.     var Hwnd
  206.     dm[hwnd_count]=com("dm.dmsoft")
  207.     Hwnd=dm[hwnd_count].GetForegroundWindow()
  208.     help.messagebox("线程"&hwnd_count&"成功开启"&",窗口句柄:"&Hwnd)
  209. endfunction
  210. function end(hwnd_count)
  211.     dm[hwnd_count].UnBindWindow()
  212.     main_pid[hwnd_count]=0
  213.     help.messagebox("脚本已完成!")
  214. endfunction
  215. endnamespace
  216. //空间结束
复制代码



回复

使用道具 举报

发表于 2014-2-28 16:42:19 | 显示全部楼层
第一个问题.界面上的 热键控件 的 热键键值 是否有设置对应的 热键值 ,即 Ctrl+1 ....Ctrl+F1 ...等等
第二个问题.界面上的热键控件的事件里的 热键事件 ,是否与 源码里的事件相关联了.也就是说有没有点过热键事件的下拉,选择添加过.
第三,当使用 main_pid[0]==0 当条件时,先在初始化里给数组全部赋值0.或是直接写成 (main_pid[0]+0)==0
回复 支持 反对

使用道具 举报

发表于 2014-2-28 15:43:48 | 显示全部楼层
if(main_pid[0]==null)   数组初始化是null,不是0
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-28 15:54:11 | 显示全部楼层
乾武 发表于 2014-2-28 15:43
if(main_pid[0]==null)   数组初始化是null,不是0

亲 , 不是这里出了问题 .

我尝试过了,在初始化的时候利用循环赋值都0.

也尝试过你的方法(当然,我把循环语句给注释了),也不行.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-28 15:54:13 | 显示全部楼层
乾武 发表于 2014-2-28 15:43
if(main_pid[0]==null)   数组初始化是null,不是0

亲 , 不是这里出了问题 .

我尝试过了,在初始化的时候利用循环赋值都0.

也尝试过你的方法(当然,我把循环语句给注释了),也不行.
回复 支持 反对

使用道具 举报

发表于 2014-2-28 16:31:56 | 显示全部楼层
热键响应函数是用系统自动生成的,还是你自己手动写上去的啊?可别是自己写上去的啊,那样不会响应的





题外话:
线程函数开启名起的真够大气啊   main  嘿
没见你绑定,倒见你解绑,虽然这不是问题的关键。
既然用的扩展开启,那你关闭热键响应函数里写一句thread.closethread也就够了啊

回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-28 16:47:45 | 显示全部楼层
dongyijun1979 发表于 2014-2-28 16:31
热键响应函数是用系统自动生成的,还是你自己手动写上去的啊?可别是自己写上去的啊,那样不会响应的

热键函数的确是自己写的.Ctrl 1是系统生成的.现在连Ctrl 1都无法开启

退出函数中含有解绑,作用不大,解不解绑也无所谓,反正返回false.但是插件对象都无法生成,更别说绑定了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-2-28 17:11:42 | 显示全部楼层
小西 发表于 2014-2-28 16:42
第一个问题.界面上的 热键控件 的 热键键值 是否有设置对应的 热键值 ,即 Ctrl+1 ....Ctrl+F1 ...等等
第二 ...

谢谢了~问题已经解决了~
回复 支持 反对

使用道具 举报

发表于 2014-2-28 17:12:48 | 显示全部楼层
看来问题好像就是小西说的第三点。数组元素未赋值时,其值为null,而不是你代码中的0
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

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

GMT+8, 2024-9-24 11:50 , Processed in 0.040358 second(s), 23 queries .

Powered by 海安简单软件服务部

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

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