Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


Problems using createThread()

 
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting
View previous topic :: View next topic  
Author Message
HenryEx
Expert Cheater
Reputation: 2

Joined: 18 Dec 2011
Posts: 100

PostPosted: Tue Mar 04, 2025 9:25 am    Post subject: Problems using createThread() Reply with quote

Trying to fetch some game data asynchronously in the background without blocking the interface, and i'm having trouble with this. Most of the time, the UI still locks up while the thread runs.
I've narrowed down my problem to two scenarios.

Why does this freeze GUI until thread completes:
Code:
local function doSetupThread ( self, func, target, typ )
  sleep(2000)
  print('Done')
end

local function setupAsync()
  createThread(doSetupThread())
end

setupAsync()



And this doesn not freeze the GUI and runs in the background:

Code:
local function doSetupThread ( self, func, target, typ )
  sleep(2000)
  print('Done')
end

local function setupAsync()
  createThread(doSetupThread)
end

setupAsync()


These should be effectively identical.

I don't want to write a separate function for all X threads i want to run, just one generalized function with certain arguments. But whenever i try to pass arguments via createThread (even if there are none), the thread creator seems to wait for the thread.
Back to top
View user's profile Send private message
Dark Byte
Site Admin
Reputation: 468

Joined: 09 May 2003
Posts: 25718
Location: The netherlands

PostPosted: Tue Mar 04, 2025 9:56 am    Post subject: Reply with quote

In the first script you pass the result of doSetupThread to createThread, which isn't a valid function (it returns nil) so doesn't do anything

in the 2nd version you pass the function doSetupThread to create thread, which will result in the function being executed in another thread

if you want to pass parameters do so by adding more parameters to createThread or use local vars (upvalues)

Code:

local upvalueexample=4

local function doSetupThread ( self, func, target, typ )
  printf("%s %s %s", tostring(func), tostring(target), tostring(typ))
  sleep(2000)
  print('Done')
  printf("upvalueexample=%d",upvalueexample)
end

local function setupAsync()
  createThread(doSetupThread, 1,2,'3')
end

setupAsync()


_________________
Do not ask me about online cheats. I don't know any and wont help finding them.

Like my help? Join me on Patreon so i can keep helping
Back to top
View user's profile Send private message MSN Messenger
ParkourPenguin
I post too much
Reputation: 150

Joined: 06 Jul 2014
Posts: 4657

PostPosted: Tue Mar 04, 2025 10:52 am    Post subject: Reply with quote

More detail:
Code:
function foo()
  return 5
end

print(('foo() = %d'):format(foo()))
print(('foo   = %s'):format(foo))

assert(foo() ~= foo)

createthread(foo()) -- same as `createthread(5)`; bad
createthread(foo) -- this is the one you want

_________________
I don't know where I'm going, but I'll figure it out when I get there.
Back to top
View user's profile Send private message
HenryEx
Expert Cheater
Reputation: 2

Joined: 18 Dec 2011
Posts: 100

PostPosted: Tue Mar 04, 2025 3:14 pm    Post subject: Reply with quote

I see how that works, now. I was a bit confused by the wiki entry on it, that clearly shows some ... arguments like this:

Quote:
createThread(function(Thread,...), ...)


I figured since it shows the thread passing itself down to the function in brackets, plus additional ... after that, that you need brackets if you want to send arguments down the line. The additional arguments shown after the brackets didn't help my confusion, but it sorta makes sense now.

This is coming just in time, since i'll be wanting to use pcall() for my threads to make sure they clean up properly despite errors, and that works the same way!

Thanks for the help.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Cheat Engine Forum Index -> Cheat Engine Lua Scripting All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You can download files in this forum


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites