запуск функции в отдельном потоке

Валентин

Новичок
Пользователь
Ноя 13, 2020
114
1
18
Здраствуйте! Когда нажимаю start, функция запускается, но окно перестаёт отвечать. Как можно запустить функцию main в отдельном потоке?

import random
import pymem.process
import re
import keyboard
import requests
import pymem
import threaded
from tkinter import *

windows 10 64bit

python 3.9.4

Код:
import random
import pymem.process
import re
import keyboard
import requests
import pymem
import threaded
from tkinter import *


offsets = 'https://raw.githubusercontent.com/frk1/hazedumper/master/csgo.json'
response = requests.get(offsets).json()

dwForceJump = 0x524DEDC
dwLocalPlayer = 0xD8C2BC
m_iTeamNum = int(response["netvars"]["m_iTeamNum"])
m_fFlags = 0x104

tk = Tk()

def main():
    pm = pymem.Pymem("csgo.exe")
    _client = pymem.process.module_from_name(pm.process_handle, "client.dll").lpBaseOfDll
    while True:
        try:
            if keyboard.is_pressed("space"):
                player = pm.read_int(_client + dwLocalPlayer)
                jump = _client + dwForceJump
                player_state = pm.read_int(player + m_fFlags)

                if player_state == 257 or player_state == 263:  # 257 - player on ground, 263 - crouch
                    pm.write_int(jump, 5)
                    time.sleep(0.3)  # Чем меньше задержка - тем лучше bhop, но большая нагрузка на процессор
                    pm.write_int(jump, 4)
        except pymem.exception.MemoryReadError:
            pass



btn = Button(tk, text='START', command=main)
btn.pack()
 

Валентин

Новичок
Пользователь
Ноя 13, 2020
114
1
18
Здраствуйте! Когда нажимаю start, функция запускается, но окно перестаёт отвечать. Как можно запустить функцию main в отдельном потоке?

import random
import pymem.process
import re
import keyboard
import requests
import pymem
import threaded
from tkinter import *

windows 10 64bit

python 3.9.4

Код:
import random
import pymem.process
import re
import keyboard
import requests
import pymem
import threaded
from tkinter import *


offsets = 'https://raw.githubusercontent.com/frk1/hazedumper/master/csgo.json'
response = requests.get(offsets).json()

dwForceJump = 0x524DEDC
dwLocalPlayer = 0xD8C2BC
m_iTeamNum = int(response["netvars"]["m_iTeamNum"])
m_fFlags = 0x104

tk = Tk()

def main():
    pm = pymem.Pymem("csgo.exe")
    _client = pymem.process.module_from_name(pm.process_handle, "client.dll").lpBaseOfDll
    while True:
        try:
            if keyboard.is_pressed("space"):
                player = pm.read_int(_client + dwLocalPlayer)
                jump = _client + dwForceJump
                player_state = pm.read_int(player + m_fFlags)

                if player_state == 257 or player_state == 263:  # 257 - player on ground, 263 - crouch
                    pm.write_int(jump, 5)
                    time.sleep(0.3)  # Чем меньше задержка - тем лучше bhop, но большая нагрузка на процессор
                    pm.write_int(jump, 4)
        except pymem.exception.MemoryReadError:
            pass



btn = Button(tk, text='START', command=main)
btn.pack()
Сам спросил - сам ответил.

Создаём функцию start_main()
Код:
def start_main():
    threading.Thread(target=main, daemon=True).start()
В атрибуте target, указываем функцию которую хотим запустить. Готово! Программа отвечает, функция работает.
 

Форум IT Специалистов