#include <thread> #include <windows.h> #include <vector> struct Obj { HANDLE ev; std::thread t; Obj(HANDLE ev, std::thread &&t) :ev(ev), t(std::move(t)) { } }; std::vector<Obj> threads; static double sec() { LARGE_INTEGER v,f; QueryPerformanceFrequency(&f); QueryPerformanceCounter(&v); return v.QuadPart / (double)f.QuadPart; } int main(int argc, char**argv) { int n = 10; if (argc >= 2) { n = atoi(argv[1]); } bool ev = false; double t0; if (!ev) { Sleep(1000); t0 = sec(); } for (int i=0; i<n; i++) { HANDLE h; h = CreateEvent(nullptr, FALSE, FALSE, nullptr); threads.push_back(Obj(h,std::thread( [](HANDLE h, bool ev) { if (ev) { WaitForSingleObject(h, INFINITE); } }, h, ev )) ); } if (ev) { Sleep(1000); t0 = sec(); for (int i=0; i<n; i++) { SetEvent(threads[i].ev); } } for (int i=0; i<n; i++) { threads[i].t.join(); } double t1 = sec(); printf("%f\n", (t1-t0)/n); }
- カスペルあり : 15msec
- カスペルなし : 200usec
スレッド起動が遅くない最近のOSに慣れてスレッドプールのつくりかたを忘れた我々に警鐘を鳴らしてくれるカスペル先生大好き!愛してる!消滅して!!
レイテンシ15msecとかふざけてんの?60fpsほぼ終わってるんですけど。