TC官方合作论坛

标题: 多线程,大漠对象及窗口绑定问题 [打印本页]

作者: wwwlovea    时间: 2013-9-8 14:20
标题: 多线程,大漠对象及窗口绑定问题
第一多线程的开启后扩展开启到底有什么区别,使用的时候具体用哪个呢?
第二在多线程中大漠对象的创建,我现在使用的是TC4.0以后的版本,大漠对需要在每个线程中都创建一次吗,我做过测试好像只在外面创建一个大漠对象就可以了,但是不知道具体原因,所以有次疑问。大漠窗口的绑定需要在每个线程中都绑定(操作同一个窗口非多开)吗?

作者: jianqiumy    时间: 2013-9-8 15:54
第一:以我理解,没什么大分别,
这里"我的程序"是空间名",线程方法"是执行函数; "销毁操作"也是执行函数,"参数"有就传,没有就留空""
线程.扩展开启("我的程序.线程方法","我是参数A","我的程序.销毁操作","我是参数B")
扩展开启线程,就是执行"线程方法"后,直接执行销毁操作结束线程(也就是调用另一个函数结束这个线程)
.销毁操作;里面是一个函数(自定义执行动作)

线程.开启("我的程序.线程方法","我是参数")
线程.开启(也可以做到,代码都是自己写的,想怎么样就怎么样写)
用那一个看自己需要吧,都可以()

4.0后~~一个对象对应一个窗口(不管这个窗口有多少条线程)--只需要绑定一次
作者: wwwlovea    时间: 2013-9-8 19:22
回复 2楼jianqiumy的帖子

十分感谢你的回答!
作者: wwwlovea    时间: 2013-9-8 19:25
回复 2楼jianqiumy的帖子

我想问一下TC在使用大漠多线程的时候既然一个对象对应一个窗口,只需要绑定一次,那么这个绑定操作是不是就可以在线程外面写了,不用写进线程内部,同样解绑也是写在线程外对吗??
作者: jianqiumy    时间: 2013-9-8 19:38
回复 4楼wwwlovea的帖子

与线程无关的~~~
你不用线程也行~~不过会把你卡得一B一B的,
多开的话还建议还是用线程,论坛里有很多事例~~参考一下别人的~~理解了怎么用都行
你要是用插件绑定,要后台或者前台,离不开线程的~~~方方面面都靠线程来控制~~

例如:你绑定窗口一,窗口二,那你如何用来控制那个是窗口一那个是窗口二呢?

比如你一个游戏你要暂停都要通过线程来控制的,TC就是线程好用~~
对啊,
解绑一样,但是你要是多窗口,对应下标就行了

反正论坛里有很多事例~~自己多看~~看看基础也是要的



作者: wwwlovea    时间: 2013-9-8 20:39
回复 5楼jianqiumy的帖子


[attach]11012[/attach]
我用的TC4.0以后的版本,在运行中使用了大漠插件,但是这个是出现这个问题怎么办呢.
  1. namespace XATC
  2. //全局变量
  3. 变量 gamehadle,dm,hpHandle
  4. 变量 hptext

  5. //开始按钮_点击操作
  6. function start_click()

  7. //如果没有获得游戏窗口句柄就提示并跳转到结束
  8. if(gamehadle==0 || gamehadle==null)
  9. 辅助.消息框("请先获得游戏窗口再启动!")
  10. goto sign1
  11. endif

  12. //激活游戏窗口
  13. dm.SetWindowState(gamehadle,1)
  14. //绑定游戏窗口
  15. isbind = dm.BindWindow(gamehadle,"dx","dx","dx",0)
  16. dm.delay(50)

  17. //检测大漠工具绑定游戏窗口是否成功,
  18. if(isbind==0)
  19. statictext.settext("tishi","大漠插件绑定游戏窗口失败!")
  20. goto sign1
  21. endif

  22. //自身窗口最小化
  23. //window.setwindowmin(window.getmyhwnd())

  24. hptext = edit.gettext("edit0")

  25. sign1:

  26. endfunction

  27. //加血函数
  28. function addhp()
  29. while(true)
  30. start = 461 //加血起点坐标
  31. end = 676 //加血终点坐标
  32. leng = end - start
  33. addx = start + leng * hptext /100 //加血X坐标

  34. //dm.MoveTo(addx,799)
  35. //dm.delay(5000)
  36. dm.MoveTo(1386,539)
  37. dm.delay(50)
  38. dm.LeftClick()
  39. //变量 intX,intY
  40. ////大漠区域着色
  41. //dm.FindColor(addx,799,676,809,"2c2b27-090c0e",0.9,0,intX,intY)
  42. ////如果在加血坐标点到终点找到黑色就加血(按F1)
  43. //if(intX >= 0 && intY >= 0)
  44. //dm.KeyPress(112)
  45. //endif

  46. endwhile
  47. endfunction
  48. //退出按钮_点击操作
  49. function exit_click()
  50. //调用暂停热键关闭所有线程
  51. XATC.hotkey0_onhotkey()

  52. //解除绑定窗口
  53. if(dm.IsBind(gamehadle))
  54. dm.UnBindWindow()
  55. endif

  56. help.exit()
  57. endfunction


  58. //获得游戏窗口按钮点击事件
  59. function button0_click()
  60. help.confirmationbox("点击确定后鼠标移动到游戏窗口停留5秒获得游戏窗口","获得游戏窗口",1,真)
  61. help.sleep(3000)
  62. string message
  63. gamehadle=window.getmousemovewndhand()
  64. statictext.setcolor("tishi",#ff0000)//设置提示标签字体红色

  65. if(gamehadle!=0)
  66. message=window.getwindowcaption(gamehadle)
  67. statictext.settext("tishi",message)
  68. else
  69. statictext.settext("tishi","未获得窗口")
  70. endif
  71. endfunction

  72. //界面初始化
  73. function init()
  74. //设置最小化的时候隐藏到托盘
  75. help.settray("my_tray",false)

  76. //检测是否注册大漠插件
  77. isreg = help.isregister("dm.dmsoft")
  78. if(!isreg)
  79. //如果没有注册大漠插件这里进行自动注册
  80. help.regdll("rc:dm.dll",true)
  81. endif

  82. //创建大漠对象
  83. dm = com("dm.dmsoft")
  84. endfunction

  85. //点击暂停按钮事件
  86. function button1_click()
  87. //调用暂停热键功能
  88. XATC.hotkey0_onhotkey()
  89. endfunction

  90. //暂停热键失去焦点事件
  91. function hotkey0_killfocus()
  92. hotkey.destroy("hotkey0")
  93. hotkey.register("hotkey0")
  94. endfunction

  95. //暂停热键执行
  96. function hotkey0_onhotkey()
  97. //这里涉及到停止所有线程,需要一步一步添加
  98. //关闭吃药线程
  99. if(hpHandle!=0 && hpHandle!= null)
  100. 线程.关闭(hpHandle)
  101. endif

  102. endfunction

  103. endnamespace
  104. //空间结束
复制代码


作者: jianqiumy    时间: 2013-9-8 20:49
回复 6楼wwwlovea的帖子

dm 设置全局变量
当然你要是传参的话,可局部变量

作者: wwwlovea    时间: 2013-9-8 21:41
回复 7楼jianqiumy的帖子

我那个DM是全局变量啊
作者: jianqiumy    时间: 2013-9-8 22:09
回复 8楼wwwlovea的帖子

那你做个判断是否注册成功?
收费的还是免费的?运行的时候看看插件版本,看得到就注册成功了

作者: wwwlovea    时间: 2013-9-8 22:13
回复 9楼jianqiumy的帖子

都是免费的呀
有时候连那个dm.delay都会出错
作者: jianqiumy    时间: 2013-9-8 22:21
回复 10楼wwwlovea的帖子

你初始化的时候直接注册,再判断是否注册成功,查看一下版本~~
照你代码看来是没注册成功
作者: wwwlovea    时间: 2013-9-9 12:26
回复 11楼jianqiumy的帖子

是个很诡异的问题,我已经在机器山注册了,今天又可以运行了,时有时无郁闷。
作者: jianqiumy    时间: 2013-9-9 13:11
回复 12楼wwwlovea的帖子

不要判断是否注册了,
每启动一次就初始化注册一次试试
作者: wwwlovea    时间: 2013-9-9 14:18
回复 13楼jianqiumy的帖子

问题很诡异,现在还好了,但是大漠里的
dm.delay(5000)
这个延迟功能怎么不好用呢,根本没有起到延时5秒的作用
作者: jianqiumy    时间: 2013-9-9 18:12
回复 14楼wwwlovea的帖子

这个本来就不好用,用TC自带的就好了
作者: freenoon    时间: 2016-8-1 01:03
dm.Delay()




欢迎光临 TC官方合作论坛 (http://bbs.52tc.co/) Powered by Discuz! X3.1