diff --git a/CMakeFiles/Progress/1 b/CMakeFiles/Progress/1 new file mode 100644 index 0000000..7b4d68d --- /dev/null +++ b/CMakeFiles/Progress/1 @@ -0,0 +1 @@ +empty \ No newline at end of file diff --git a/CMakeFiles/Progress/count.txt b/CMakeFiles/Progress/count.txt new file mode 100644 index 0000000..0cfbf08 --- /dev/null +++ b/CMakeFiles/Progress/count.txt @@ -0,0 +1 @@ +2 diff --git a/CMakeFiles/app.dir/main.cpp.obj b/CMakeFiles/app.dir/main.cpp.obj index 220c0d8..16b7211 100644 Binary files a/CMakeFiles/app.dir/main.cpp.obj and b/CMakeFiles/app.dir/main.cpp.obj differ diff --git a/CMakeFiles/app.dir/main.cpp.obj.d b/CMakeFiles/app.dir/main.cpp.obj.d deleted file mode 100644 index c9f7347..0000000 --- a/CMakeFiles/app.dir/main.cpp.obj.d +++ /dev/null @@ -1,122 +0,0 @@ -C:/Users/TheNosiriN/Documents/CppProjects/Hexo Game Engine/HexoThreading/inc/HexoThreading.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/iostream -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/yvals_core.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/vcruntime.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/sal.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/concurrencysal.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/vadefs.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xkeycheck.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/istream -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/ostream -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/ios -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xlocnum -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/climits -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/limits.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/cmath -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/yvals.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/crtdbg.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/vcruntime_new_debug.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/vcruntime_new.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/crtdefs.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/use_ansi.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/cstdlib -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/math.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_math.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/stdlib.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_malloc.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_search.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/stddef.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_wstdlib.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xtr1common -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/intrin0.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/cstdio -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/stdio.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_wstdio.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_stdio_config.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/iterator -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/iosfwd -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/cstring -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/string.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_memory.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_memcpy_s.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/errno.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/vcruntime_string.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_wstring.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/cwchar -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/wchar.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_wconio.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_wctype.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_wdirect.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_wio.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_share.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_wprocess.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_wtime.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/sys/stat.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/sys/types.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xstddef -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/cstddef -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/initializer_list -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xutility -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/utility -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/type_traits -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/cstdint -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/stdint.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/streambuf -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xiosbase -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/share.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/system_error -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/__msvc_system_error_abi.hpp -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/cerrno -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/stdexcept -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/exception -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/malloc.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/vcruntime_exception.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/eh.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_terminate.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xstring -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xmemory -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/limits -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/cfloat -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/float.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/isa_availability.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/new -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xatomic.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xcall_once.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xerrc.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/atomic -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xthreads.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xtimec.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/ctime -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/time.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xlocale -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/memory -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/typeinfo -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/vcruntime_typeinfo.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xfacet -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xlocinfo -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/xlocinfo.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/cctype -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/ctype.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/clocale -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/locale.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/vector -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/chrono -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/ratio -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/thread -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/process.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/corecrt_startup.h -C:/Program Files (x86)/Windows Kits/10/include/10.0.19041.0/ucrt/math.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/vcruntime_startup.h -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/tuple -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/mutex -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/condition_variable -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/functional -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/string -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/queue -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/algorithm -C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.29.30037/include/deque -C:/Users/TheNosiriN/Documents/CppProjects/Hexo Game Engine/HexoThreading/Shared/HexoResourceList.h -C:/Users/TheNosiriN/Documents/CppProjects/Hexo Game Engine/HexoThreading/Shared/HXRC.h -C:/Users/TheNosiriN/Documents/CppProjects/Hexo Game Engine/HexoThreading/inc/Threading.h -C:/Users/TheNosiriN/Documents/CppProjects/Hexo Game Engine/HexoThreading/inc/ThreadingEngine.h diff --git a/CMakeFiles/app.dir/vc140.pdb b/CMakeFiles/app.dir/vc140.pdb index 221f2a7..ba7f8a3 100644 Binary files a/CMakeFiles/app.dir/vc140.pdb and b/CMakeFiles/app.dir/vc140.pdb differ diff --git a/README.md b/README.md index e5df7bb..4dadab5 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,163 @@ -# HexoThreading -Tiny Header-only Threading Library. Made in C++14 +# Hexo Threading +Tiny Header-only Threading Library (Alpha). Made in C++14 + + +## Usage + +Every function is called by from the Threading Engine. + +```c++ +using namespace Hexo; + +ThreadingEngine hxt = ThreadingEngine(); +``` + +\ +All spawned threads are tracked and linked with the life of ThreadingEngine through a `Hexo::ResourceList`. But the Thread pools are not tracked and should be destroyed manually. + + + +**There are 5 spawnable components in the library** + +**** +- **Immediate Threads**: They are used as normal threads. They take in data and function to run at construction. They can be joined or left alone to run asynchronously. They destroy when the task is finished. + +```c++ +int num = 1645; + +HXImmediateThread t = hxt.SpawnImmediateThread(num, + [&num](void* data){ + num *= 10; + } +); + +hxt.JoinThread(t); +std::cout << "Immediate thread: " << num << '\n'; +``` + + +**** +- **Worker Threads**: They are threads live until explicitly destroyed. They take in data and function to run at every task you submit. They cannot be joined but they can be waited on by measuring it's taskQueue size. + +```c++ +HXWorkerThread t = hxt.SpawnWorkerThread(); + +for (int i=0; i<10; i++){ + int num = 1645 + i; + + hxt.SubmitTask(t, num, + [](void* data){ + int num = *(reinterpret_cast(data)) * 10; + std::cout << "Worker thread: " << num << '\n'; + } + ); +} + +//wait for worker thread to callback +while (true){ + volatile size_t s = hxt.GetQueueSize(t); + if (!s)break; +} + + +hxt.DestroyThread(t); +``` + + +**** +- **Dedicated Threads**: They are threads that live on until explicitly destroyed. They run on just one function which is specified at construction. They take in only data at every task you submit. They cannot be joined but they can be waited on by measuring it's taskQueue size. + +```c++ +HXDedicatedThread t = hxt.SpawnDedicatedThread( + [](void* data){ + int num = *(reinterpret_cast(data)) * 10; + std::cout << "Dedicated thread: " << num << '\n'; + } +); + +for (int i=0; i<10; i++){ + int num = 1645 + i; + hxt.SubmitTask(t, num); +} + +//wait for dedicated thread to callback +while (true){ + volatile size_t s = hxt.GetQueueSize(t); + if (!s)break; +} + + +hxt.DestroyThread(t); +``` + + +**** +- **Worker Thread Pools**: They are a pool of Worker Threads. They are given their number of threads at construction and take in the same parameters at Worker Threads at every task. They cannot be joined but they can be waited on by measuring it's taskQueue size. + +```c++ +HXWorkerThreadPool t = hxt.SpawnWorkerPool(4); + +int* numarray = new int[10]; + +for (int i=0; i<10; i++){ + numarray[i] = 1645 + i; + + hxt.SubmitTask(t, i, + [&numarray](void* data){ + int i = *(reinterpret_cast(data)); + numarray[i] *= 10; + } + ); +} + +//wait for worker thread pool to finish +while (true){ + volatile size_t s = hxt.GetQueueSize(t); + if (!s)break; +} + +hxt.DestroyPool(t); + +for (size_t i = 0; i < 10; i++) { + std::cout << "Worker pool: " << numarray[i] << '\n'; +} +delete[] numarray; +``` + + +**** +- **Dedicated Thread Pools**: They are a pool of Dedicated Threads. They are given their number of threads at construction and take in the same parameters at Dedicated Threads at every task. They cannot be joined but they can be waited on by measuring it's taskQueue size. + +```c++ +HXDedicatedThreadPool t = hxt.SpawnDedicatedPool(4, + [](void* data){ + **(reinterpret_cast(data)) *= 10; + } +); + +int* numarray = new int[10]; + +for (int i=0; i<10; i++){ + numarray[i] = 1645 + i; + int* ptr = numarray+i; + hxt.SubmitTask(t, ptr); +} + +//wait for dedicated thread pool to finish +while (true){ + volatile size_t s = hxt.GetQueueSize(t); + if (!s)break; +} + +hxt.DestroyPool(t); + +for (size_t i = 0; i < 10; i++) { + std::cout << "Dedicated pool: " << numarray[i] << '\n'; +} +delete[] numarray; +``` + + +**** +## Future Plans +This library is still in its early alpha stages. It was originally planned to be part of the Hexo Engine, and will still be part, but now I'm making this independently along with some other modules of Hexo. I will continue developing it and adding more functionality and optimizations in the future. diff --git a/app.exe b/app.exe index e364cbd..74333d9 100644 Binary files a/app.exe and b/app.exe differ diff --git a/app.ilk b/app.ilk index 831b681..5dfa12c 100644 Binary files a/app.ilk and b/app.ilk differ diff --git a/app.pdb b/app.pdb index 0d2258c..4ceb99b 100644 Binary files a/app.pdb and b/app.pdb differ diff --git a/main.cpp b/main.cpp index e8f283a..0691ad1 100644 --- a/main.cpp +++ b/main.cpp @@ -8,7 +8,6 @@ using namespace Hexo; -using namespace Hexo::Threading; @@ -182,6 +181,7 @@ int main() { for (size_t i = 0; i < 10; i++) { std::cout << "Dedicated pool: " << numarray[i] << '\n'; } + delete[] numarray; }; /////