Proper Readme.md.

This commit is contained in:
Relintai 2020-07-28 15:13:59 +02:00
parent 93320fe864
commit 1a7c4e69a5

107
README.md
View File

@ -1,3 +1,108 @@
# ThreadPool
# Thread pool module
A c++ Godot engine module, that will help you with threading.
It can also work if threads are not available (like on the javascript backend), in this case it runs jobs on the
main thread. Jobs themselves can also distribute their work onto multiple frames, and you can set how much time
is allocated per frame.
You can access it's setting from the `Project->Project Settings...` menu, ont the `ThreadPool` category.
# Pre-built binaries
You can grab a pre-built editor binary from the [Broken Seals](https://github.com/Relintai/broken_seals/releases)
repo, should you want to. It contains all my modules.
# ThreadPolJob
Contains a job that can run on different threads.
A job is only considered finished, if you set the 'complete' property to 'true'. If multiple threads are available,
the system will not check for this though, because there is no need.
If you want to support envioronment that doesn't have threading, you can use
```
bool should_do(const bool just_check = false);
bool should_return();
```
helpers.
For example:
```
func _execute():
# On the first run this will always return, true, on the subsequest runs it will return false
if should_do():
thing1()
# if you ran out the allocated timeframe in a frame, this will return true
if should_return():
return
if should_do():
thing2()
complete = true
```
`should_do`'s optional parameter will let you just query the system, whether you finished a step, without
incrementing internal couters.
This class will need litle tweaks, hopefully I can get to is soon.
# ThreadPoolExecuteJob
This will let you run a method uin an another thread, without creating your own jobs.
Use it through the ThreadPool Singleton. Like:
```
ThreadPool.create_execute_job(self, "method", arg1, arg2, ...)
#or
ThreadPool.create_execute_job_simple(self, "method")
```
This class will need litle tweaks, hopefully I can get to is soon.
# ThreadPool singleton
The ThreadPool singleton handles jobs.
If you have a job, submit it using `add_job`:
```
MyJob job = MyJob.new()
ThreadPool.add_job(job)
```
It's api is still a bit messy, it will be cleaned up (hopefully very soon).
# Building
1. Get the source code for the engine.
If you want Godot 3.2:
```git clone -b 3.2 https://github.com/godotengine/godot.git godot```
If you want Godot 4.0:
```git clone https://github.com/godotengine/godot.git godot```
2. Go into Godot's modules directory.
```
cd ./godot/modules/
```
3. Clone this repository
```
git clone https://github.com/Relintai/thread_pool thread_pool
```
4. Build Godot. [Tutorial](https://docs.godotengine.org/en/latest/development/compiling/index.html)