找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 3014|回复: 0

[教程源码] [转载][361度]向父线程传递数据

[复制链接]
  • 打卡等级:行侠仗义

1080

主题

2101

回帖

4281

积分

院长

鲜花
6
猫粮
7395
QQ
发表于 2018-10-11 20:01:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×

按键精灵脚本一般是子线程向父线程传递数据,但有时父线程需要获得子线程的工作结果,比如多线程找图。这里讲的是两个向父线程传递数据的方法。


方法一,用按键精灵的全局变量或者环境变量保存父线程ID,子线程通过父线程ID向父线程法送数据:


[按键精灵] 纯文本查看 复制代码
'声明获得当前线程ID的API,按键精灵自带的GetThreadID目前不能获得主线程的线程ID
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Global MainTid
'获得当前线程ID并将起俯值给全局变量
MainTid = GetCurrentThreadId()
For 3
    '创建线程
    Call BeginThread(MyThread)
Next
Do
    '接受线程数据,当返回值是0时收到数据
    If Plugin.WndEx7_20.RecvThreadData(data)=0 Then
        MsgBox data,4096
    End If
    Delay 50
Loop
Sub MyThread()
    '发送线程数据给脚本主线程
    'Timer是按键精灵标准VBS命令说明中没记录的vbs函数,功能:返回午夜12时以后已经过去的秒数
    Call Plugin.WndEx7_20.PostThreadData(MainTid,"线程" & CStr(GetThreadID()) & ":时间" & CStr(Timer()),0)
End Sub

此方式的优点是较脚本比较简单,缺点是如果是父线程不是脚本主线程,而且这个线程过程被创建多个同时运行,会导致全局变量冲突。下面的方法可以解决这个问题。




方法二,父线程向子线程传递它的线程ID,子线程通过父线程ID向父线程法送数据:


[按键精灵] 纯文本查看 复制代码
'声明获得当前线程ID的API,按键精灵自带的GetThreadID目前不能获得主线程的线程ID
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Dim ParentTid, ChildTid
'获得当前线程ID
ParentTid = GetCurrentThreadId()
For 3
    '创建线程
    ChildTid = BeginThread(MyThread)
    '发送线程数据,这里是发送父线程ID给子线程
    Call Plugin.WndEx7_20.PostThreadData(ChildTid,ParentTid,0)
Next
Do
    '接受线程数据,当返回值是0时收到数据
    If Plugin.WndEx7_20.RecvThreadData(data)=0 Then
        MsgBox data,4096
    End If
    Delay 50
Loop
Sub MyThread()
    Do
        '接收线程数据,这里是接受父线程ID,当返回值是0时收到数据
        If Plugin.WndEx7_20.RecvThreadData(ParentTid)=0 Then
            Exit Do
        End If
        Delay 50
    Loop
    '发送线程数据给脚本主线程
    'Timer是按键精灵标准VBS命令说明中没记录的vbs函数,功能:返回午夜12时以后已经过去的秒数
    Call Plugin.WndEx7_20.PostThreadData(ParentTid,"线程" & CStr(GetThreadID()) & ":时间" & CStr(Timer()),0)
End Sub

此方式虽然复杂,但完美解决了冲突问题。此脚本稍加修改就可以实现父线程给子线程分派任务,子线程返回任务结果的脚本。



脚本中使用的361度窗口插件下载:
http://pan.baidu.com/s/1ntQswaP

本文转载于361度插件作者博客
http://bg361.blog.163.com/
楼主热帖
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫猫编程学园

GMT+8, 2024-3-29 13:39

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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