TC官方合作论坛

 找回密码
 立即注册
查看: 1117|回复: 3

[讨论] 线程交互

[复制链接]
发表于 2012-12-17 00:06:45 | 显示全部楼层 |阅读模式

马上加入TC

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

x
大家写脚本,经常会被验证码、死亡等突然发生的问题卡死脚本有木有?有木有? 反正我是。所以今天特意使用线程来解决这个问题。。因为线程他可以随时处理这些问题。。。。           1.准备三条线程:人物操作跑图线程、死亡处理线程、验证处理线程。
           2. 人物操作跑图线程级别最低,验证处理线程可以暂停,恢复。死亡处理线程可以关闭和重开。上代码吧。
  1. namespace TIT
  2. //TIT 看不懂是啥意思吧?是这个意思ThreadInteractiveTest..TC不让我用!
  3. int handle //控制线程事件句柄 --------个人认为其实就是一个临界区一把钥匙
  4. int runChartThreadhandle //跑图线程句柄
  5. int deathThreadhandle //死亡线程句柄
  6. int checkCodeThreadhandle //验证码句柄

  7. //启动所有线程
  8. function bool startThread(string str)
  9.     //创建一个带名字的事件,自动设置事件状态,初始事件可用
  10.     handle=thread.createevent(false,true,"event")
  11.     //---------启动下面所有线程
  12.     runChartThreadhandle = thread.beginthreadex("TIT.runChart","","TIT.cancellationRunChart","")
  13.     checkCodeThreadhandle = thread.beginthreadex("TIT.checkCode","","TIT.cancellationCheckCode","")
  14.     deathThreadhandle = thread.beginthreadex("TIT.death","","TIT.cancellationDeath","")
  15.     help.sleep(10000)
  16.     thread.closethread(runChartThreadhandle)
  17.     return true
  18. endfunction

  19. //游戏人物路图线程
  20. function bool runChart(string str)
  21.     help.messagebox("跑图线程被开始了!!!!!!!!!!!!!!!!")
  22.     while(true)         
  23.         help.sleep(3000)
  24.         help.messagebox("角色在跑图中...")
  25.     endwhile  
  26.     return true
  27. endfunction

  28. //人物路图线程线程结束要做的操作
  29. function bool  cancellationRunChart(string str)
  30.     help.messagebox("跑图线程被关闭")
  31.     return true
  32. endfunction

  33. //验证码线程
  34. function bool checkCode(string str)
  35.      while(true)
  36.         help.sleep(12000)
  37.         thread.waitforthread(handle,-1)//发现死亡无限等待,其它操作事件被占用
  38.                   bool a = thread.suspendthread(runChartThreadhandle)
  39.                   //if(!a)
  40.                       //help.messagebox("线程暂停失败")
  41.                   //endif
  42.                   help.messagebox("发现验证码载图,其它线程给我停会----")
  43.                   help.sleep(10000)
  44.                   bool b = thread.resumethread(runChartThreadhandle)
  45.                   //if(!a)
  46.                       //help.messagebox("线程恢复失败")
  47.                   //endif
  48.                   help.messagebox("验证码载图发送完毕,你们先上一会-----")
  49.         thread.setevent(handle)//复活后,其它事件为可用状态
  50.         help.sleep(9000)
  51.         thread.waitforthread(handle,-1)//发现死亡无限等待,其它操作事件被占用
  52.                   thread.suspendthread(runChartThreadhandle)
  53.                   help.messagebox("我的码有回应了,你们停下,输入验证码...")
  54.                   help.sleep(10000)
  55.                   help.messagebox("输入完了,警察走了,哎又交了几分钱保护费。你们搞...")
  56.                   thread.resumethread(runChartThreadhandle)
  57.         thread.setevent(handle)//复活后,其它事件为可用状态
  58.     endwhile
  59.     return true
  60. endfunction

  61. //验证码线程结束要做的操作
  62. function bool  cancellationCheckCode(string str)
  63.     help.messagebox("验证码线程被关闭")
  64.     return true
  65. endfunction

  66. //死亡线程
  67. function bool death(string str)
  68.     while(true)
  69.         help.sleep(18000)//发现死亡
  70.         thread.waitforthread(handle,-1)//发现死亡无限等待,其它操作事件被占用
  71.         thread.closethread(runChartThreadhandle)//你丫的还跑个毛呀,都是尸体了。
  72.    //---------------------------------------------这里关闭跑图子线程。所有程序全关闭。
  73.    //----------有人告诉我这是为什么,还是本身就不能这样干?
  74.         help.messagebox("春哥正在复活中...")
  75.         help.sleep(2000)
  76.         //跑图线程被重新开始
  77.         runChartThreadhandle = thread.beginthreadex("TIT.runChart","","TIT.cancellationRunChart","")   
  78.         thread.setevent(handle)//复活后,其它事件为可用状态
  79.     endwhile
  80.     return true
  81. endfunction

  82. //死亡线程结束要做的操作
  83. function bool  cancellationDeath(string str)
  84.     help.messagebox("死亡线程被关闭")
  85.     return true
  86. endfunction

  87. //开始按钮事件
  88. function bool start_click()
  89.     TIT.startThread("")
  90.     return true
  91. endfunction

  92. //结束按钮事件
  93. function bool exit_click()
  94.     thread.closethread(runChartThreadhandle)
  95.     thread.closethread(deathThreadhandle)
  96.     thread.closethread(checkCodeThreadhandle)
  97.     thread.closehandle(handle)//清理内核对象,释放资源
  98.     help.exit()
  99.     return true
  100. endfunction

  101. endnamespace
复制代码
这只是我个人想法。测试结果差不多也能看出效果了!如果有大神有更好的思路,请多多训导。。。
注:::大家以后取空间名不要太专业了。如:ThreadInteractiveTest、CloseThreadTest 这些被 TC 内部占用的空间名。。。。当运行时。啥也不说,直接关闭TC主程序。你会付出惨痛的代价的。信不信由你。反正我流血了!!!
回复

使用道具 举报

发表于 2012-12-17 00:09:25 | 显示全部楼层
沙发
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-12-17 00:10:51 | 显示全部楼层
回复 2楼zzj15895781288的帖子

师父来了。。欢迎,欢迎...
回复 支持 反对

使用道具 举报

发表于 2012-12-17 08:49:27 | 显示全部楼层
英文的没用过,表示用 线程关闭测试 线程开启测试 这些无压力
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

推荐上一条 /2 下一条

关闭

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

GMT+8, 2024-6-17 18:41 , Processed in 0.035475 second(s), 22 queries .

Powered by 海安简单软件服务部

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

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