Priklad s WinApi je docela dobry - vsechny graficke toolkity, ktere znam (GTK, Qt, wxWidgets) obsahuji event loop a pripadne thread-safe posilani zprav. Nevidim zadny problem v tom, abych zaridil, zda se tento callback/timer provadi v hlavnim vlaknu nebo si pro to vytvorim vlakno zvlast a vysledky operaci vracim pomoci zprav hlavnimu vlaknu. Pro takove pripady je ve vsech toolkitech i thread pool, ktery bude mit pri vicenasobnem pouziti urcite mensi rezii, nez vytvareni a ruseni vlaken.
Ostatne Javascript funguje na podobnem principu.
Ok, dokážu si představit postmessage resumption policy pro winapi. Tam pak stačí, když se nadefinuje patřičná struktura a v ní funkce resume(h), která udělá PostMessage(hWnd, APP_RESUME_COROUTINE,0,(LPARAM)h.address()).
a jakmile přes GetMessage vyzvednu APP_RESUME_COROUTINE, převedu LPARAM na void* na to existuje funkce std::coroutine_handle<>::from_address() a z ní obdržím zpátky handle, na které zavolám h.resume().
(předpokládám, že předání hWnd a konstanta APP_RESUME_COROUTINE) si někde nadefinuju...
V coclasses je třída cocls::thread_pool, i cocls::dispatcher, takže i bez podpory nějakých knihoven si člověk vystačí.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjim vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvýjim serverové komponenty a informační systémy v C++
Přečteno 46 897×
Přečteno 21 929×
Přečteno 19 030×
Přečteno 15 891×
Přečteno 13 863×