飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 2771|回复: 1

[Go] Go Win进程守护请别掉进for的坑

[复制链接]
  • TA的每日心情
    奋斗
    2016-1-13 12:25
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2019-1-31 10:30:33 | 显示全部楼层 |阅读模式
    本帖最后由 small-q 于 2019-1-31 10:46 编辑

    进程守护,你请保安(for)来守护,那是要发工资,要消耗CPU的算力的.
    01.png
    我CPU比较好,看不出啥来!
    1.png
    [Golang] 纯文本查看 复制代码
    for{
        fmt.Println("老板,帮你看门,请发工资!")//不停的循环
    }

    现在有什么解决方案呢,不发工资,又能帮我看门的好方法?  下面是福利代码!
    [Golang] 纯文本查看 复制代码
    import (
        "log"
        "github.com/robfig/cron"
    )
    
    func (p *program) run() {
        // 代码写在这儿
        //for{//弃用for
        c := cron.New()
        c.AddFunc("@every 0.1m", func() {
            exPath, _ := os.Executable() //获取当前程序运行目录
            dir := filepath.Dir(exPath)
            kernel32 := syscall.NewLazyDLL("kernel32.dll")
            CreateToolhelp32Snapshot := kernel32.NewProc("CreateToolhelp32Snapshot")
            pHandle, _, _ := CreateToolhelp32Snapshot.Call(uintptr(0x2), uintptr(0x0))
            if int(pHandle) == -1 {
                return
            }
            Process32Next := kernel32.NewProc("Process32Next")
            for {
                var proc PROCESSENTRY32
                proc.dwSize = ulong(unsafe.Sizeof(proc))
                if rt, _, _ := Process32Next.Call(uintptr(pHandle), uintptr(unsafe.Pointer(&proc))); int(rt) == 1 {
    
                    if strings.Contains(fmt.Sprintf("%s", string(proc.szExeFile[0:])), "SmallQExternal.exe") == true {
                        break
                    }
                } else {
                    cmd := exec.Command(dir + "/小Q屏幕截图加载器.exe")
                    _, err := cmd.Output()
                    if err != nil {
                        //fmt.Printf("err: %v", err)
                        //return
                    } else {
                        //fmt.Printf("output: %s\n", buf)
                    }
                    break
                }
            }
            CloseHandle := kernel32.NewProc("CloseHandle")
            _, _, _ = CloseHandle.Call(pHandle)
        })
        c.Start()
        //}
    }

    2.png
    想到没? 用时钟! 请再别舍舍的用 for 啦! 感谢老飘与C版,让我看到用Go去创造完美世界!

    评分

    参与人数 1飘云币 +8 收起 理由
    yosen2001 + 8 热心分享 共同提升!

    查看全部评分

    本帖被以下淘专辑推荐:

    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-2-27 15:18
  • 签到天数: 205 天

    [LV.7]常住居民III

    发表于 2019-2-2 00:03:54 | 显示全部楼层
    学习了,谢谢
    PYG19周年生日快乐!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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