TC官方合作论坛

标题: TC的线程暂停(thread_id),,线程恢复(thread_id),,做得很差,线程暂停了不能恢复运行. [打印本页]

作者: 剑仙十号    时间: 2015-7-10 18:08
标题: TC的线程暂停(thread_id),,线程恢复(thread_id),,做得很差,线程暂停了不能恢复运行.
按定1不放开,2就会连发。放开1停止连发。
//TC的线程暂停(thread_id),,线程恢复(thread_id),,做得很差,线程暂停了不能恢复运行.
//所以在这里,我一直用 开启线程2和关闭线程2.
//下面的代码全部贴进TC5.2,就可以使用。

var hThread1,hThread2  //设置环境变量.
function 启动_热键()   
    //开户线程1,并返回线程句柄.
    hThread1=threadbegin("主程序","")
end
function 终止_热键()   
    //通过线程句柄,关闭线程1,线程2.
    threadclose(hThread1)
    threadclose(hThread2)
end

function 主程序()//线程1函数.
    var QQ,mykey=49  //主键盘的数字"1".
    while(true)//循环开始.         
        QQ = dllcall("user32.dll","long", "GetAsyncKeyState","long",mykey)
        if(QQ!=0)
            hThread2=threadbegin("按键任务","")//开户线程2,并返回线程句柄.
            sleep(50)
        end        
        while(QQ!=0)//小循环开始.
            QQ = dllcall("user32.dll","long", "GetAsyncKeyState","long",mykey)
            sleep(50)//一直循环,等待放开数字"1".
        end //小循环结束.
        threadclose(hThread2)//关闭线程2.
        sleep(50)
    end//循环结束.   
end

function 按键任务()//线程2函数.
    while(true)
        keypress(50)        
        sleep(10)
    end
end



作者: 剑仙十号    时间: 2015-7-10 18:18
上面的代码通过。下面的代码无效。为何???
var hThread1,hThread2  //设置环境变量.
function 启动_热键()   
    //开启线程1,线程2,并返回线程句柄.
    hThread1=threadbegin("主程序","")
    hThread2=threadbegin("按键任务","")
end
function 终止_热键()   
    //通过线程句柄,关闭线程1,线程2.
    threadclose(hThread1)
    threadclose(hThread2)
end

function 主程序()//线程1函数.
    var QQ,mykey=49  //主键盘的数字"1".
线程暂停(hThread2)
    while(true)//循环开始.         
        QQ = dllcall("user32.dll","long", "GetAsyncKeyState","long",mykey)
        if(QQ!=0)
线程恢复(hThread2)//①这个命令无效。为何???

            sleep(50)
        end        
        while(QQ!=0)//小循环开始.
            QQ = dllcall("user32.dll","long", "GetAsyncKeyState","long",mykey)
            sleep(50)//一直循环,等待放开数字"1".
        end //小循环结束.

线程暂停(hThread2)
        sleep(50)
    end//循环结束.   
end

function 按键任务()//线程2函数.
//②线程恢复(hThread2)//这个命令无效。为何???
    while(true)
        keypress(50)        
        sleep(10)
    end
end



作者: 剑仙十号    时间: 2015-7-10 18:20
官方,来个强人看下代码。TC简单开发吧。百度贴吧。
作者: 这论坛不错    时间: 2015-7-10 19:25
线程暂停了恢复不了的现象,在4.X的时候就有了
作者: 剑仙十号    时间: 2015-7-10 20:02
这论坛不错 发表于 2015-7-10 19:25  线程暂停了恢复不了的现象,在4.X的时候就有了

官方不理会这个bug吗??
作者: TC    时间: 2015-7-11 12:48
剑仙十号 发表于 2015-7-10 20:02
官方不理会这个bug吗??

调试了,的确有问题,这边正在测试处理
作者: 剑仙十号    时间: 2015-7-20 17:40
本帖最后由 剑仙十号 于 2015-7-20 17:52 编辑
TC 发表于 2015-7-11 12:48 调试了,的确有问题,这边正在测试处理
时间这么久了,不知道这个 恢复线程的bug,有无解决。
如果解决了,发个版本出来看看,我下载来用。
作者: TC    时间: 2015-7-20 18:35
剑仙十号 发表于 2015-7-20 17:40
时间这么久了,不知道这个 恢复线程的bug,有无解决。
如果解决了,发个版本出来看看,我下载来用。 ...

可以私聊我,发一个您的联系QQ给我吗
作者: 剑仙十号    时间: 2015-7-20 18:58
TC 发表于 2015-7-20 18:35  可以私聊我,发一个您的联系QQ给我吗

QQ,1060963268。
作者: 剑仙十号    时间: 2015-7-20 18:59
TC 发表于 2015-7-20 18:35  可以私聊我,发一个您的联系QQ给我吗

QQ,1060963268。注明来源是是TC论坛。
作者: 剑仙十号    时间: 2015-7-22 09:43
TC 发表于 2015-7-20 18:35
可以私聊我,发一个您的联系QQ给我吗


我要道歉。昨天仔细看下代码,原来是我的代码写错了。

TC的多线程,,,,线程暂停(thread_id),,线程恢复(thread_id),,做得很好。
稳定而高效率。

改正后的代码发在下一楼。


作者: 剑仙十号    时间: 2015-7-22 09:48

//做连发键的脚本,改键连发。Z键改数字1,X键改数字2。
//新建立一个脚本,代码全部粘贴,覆盖原来的代码就可以了。


var hThread,hThread1,hThread2 //设置全局变量.相当于按键精灵的环境变量.

function 启动_热键()   
  //按热键F8,开户线程1 线程2,并返回线程句柄.
  hThread=threadbegin("主程序","")
  sleep(30)
  hThread1=threadbegin("连发键1","")
  sleep(30)
  threadsuspend(hThread1)//暂停线程1.
  hThread2=threadbegin("连发键2","")
  sleep(30)
  threadsuspend(hThread2)//暂停线程2.
End

function 主程序() //主线程函数.
  var QQ1,QQ2,mykey1=49,mykey2=50  //连发键,是主键盘上的1和2.
  while(true)//循环1开始.         
    QQ1 = dllcall("user32.dll","long", "GetAsyncKeyState","long",mykey1)//调用Win32 的API函数,读取按键状态.
    QQ2 = dllcall("user32.dll","long", "GetAsyncKeyState","long",mykey2)//调用Win32 的API函数,读取按键状态.
   
    if(QQ1!=0)
      traceprint("恢复线程1.")
      threadresume(hThread1)//恢复线程2.
      sleep(10)//下面开始用GetAsyncKeyState,判断数字1,有无弹起.
      
      while(QQ1!=0)  //小循环开始.
        QQ1 = dllcall("user32.dll","long", "GetAsyncKeyState","long",mykey1)//调用Win32 的API函数,读取按键状态.
        sleep(50)  //等待50毫秒会一直循环,直到放开数字"1".
      end //小循环结束.
      traceprint("暂停线程1.")
      threadsuspend(hThread1)//暂停线程2.
      sleep(10)
    end        
   
    if(QQ2!=0)
      traceprint("恢复线程2.")
      threadresume(hThread2)//恢复线程2.
      sleep(10)//下面开始用GetAsyncKeyState,判断数字2,有无弹起.
      
      while(QQ2!=0)  //小循环开始.
        QQ2 = dllcall("user32.dll","long", "GetAsyncKeyState","long",mykey2)//调用Win32 的API函数,读取按键状态.
        sleep(50)  //等待50毫秒会一直循环,直到放开数字"2".
      end //小循环结束.
      traceprint("暂停线程2.")
      threadsuspend(hThread2)//暂停线程2.
      sleep(10)
    end   
   
  end//循环1结束.   
end

function 连发键1()//线程1函数.
  while(true)
    keypress(90)        
    sleep(10)
  end
end

function 连发键2()//线程2函数.
  while(true)
    keypress(88)        
    sleep(10)
  end
end

function 终止_热键()   
  //按热键F9,关闭主线程,线程1,线程2.
  threadclose(hThread)
  threadclose(hThread1)
  threadclose(hThread2)
end

作者: taizizhi    时间: 2016-2-4 01:51
问题解决了吗?我的也不行..




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