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

专注学习Mac并记录过程

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

进程守护,你请保安(for)来守护,那是要发工资,要消耗CPU的算力的.

for{
    fmt.Println("老板,帮你看门,请发工资!")//不停的循环
}


我CPU较好,占用率不算太高!


现在有什么解决方案呢,不发工资,又能帮我看门的好方法?  下面是福利代码!

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()
    //}
}

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

「舍得」三人行,必有我师!一分耕耘,一分收获!你所看到的都是最完美的,你看不到的我都在背后努力做到最完美。粤ICP备16050780号

Power by Z-BlogPHP  Theme by wzdaxue

请先 登录 再评论,若不是会员请先 注册