Ahoj, mam pár otázeček.
1) Není úplně k VB, ale v čem je výhoda multithreadingu? Pochopil jsem příklad, kdy se v jeden moment volá třeba 100 webových stránek ze kterých se načítají data, protože tady počítač většinu času čeká na načtení a tedy to současné načítaní proces výrazně urychlí.
Ale mě jde spíš o multithreading ve spojitosti s nenáviděnou funcí DoEvents, kterážto značně zpomaluje kód a i její umístění je tak nějak alchemie - tim myslim testy jestli ji dát každych 100 nebo 1000 nebo ... iterací. A pravě většina fór rešících pomalost DoEvents se točí okolo multithreadingu. Obecně tedy v čem je jeho výhoda, když i samotné jedno vlákno plně zaměstnává procesor? Taková moje představa je, že oproti DoEvents funkci se nepředá řízení jiné aplikaci, takže program nezamrzne a je tedy schopen reagovat na uživatelské vstupy... , ale rychlost zpracování se tim nezvýší?
2) Konkrétní případ z VBA grafické aplikace
Mam funkci, na kterou jsou přes winAPI funkci SetWindowLong přesměrovány zprávy pro jedno z oken aplikace,
pokud je zpráva něco co hledam tak to zpracuju a jinak to předam zpět proceduře na kterou by se dostala pokud by to přesměrování nebylo. Zprávy se hromadí a každých 20ms je pomocí dalšího winAPI callbacku SetTimer volána funkce, která zachycené zprávy zpracuje (pokud nějaké jsou tak se něco překreslí) a tak to jede pořad dokola. Nicméně po každém překreslení je nutné volat DoEvents. No a u toho se muj 4jádrovej noťas hooodně zapotí... překreslovaní je plynulé, ale aplikace vytěžuje procesor na 30-50%, což je několikrát víc než jak ho vytíží to samé za použití přímo nějakého nástroje aplikace.
Otázka tedy zní jde to napsat obecně nějak šetrnějš, nebo je hlavní problém opravdu ve spoustě volání funkce DoEvents. A pomůže případné použití ve VBA celkem problematického multithreadingu?
3) Vytížení procesoru, příklad výše by vlastně vytěžovat procesor neměl, jde jen o cyklus čekání a následné nepříš výpočetně složité reakce, ikdyž celkem ve velké frekvenci 20ms pro aspoň 50 překreslní za sekudu (možná to je ten problém). Ale jde mě o případy, kdy se něco od někud načte nebo nějak jinak zadá a teď si počitej plecháči, když tak kouknu na vytížení procesoru/ů tak jsem snad neviděl, aby šlo nad 50%, je nějaká cesta, jak psát kód, aby bylo vytížení co nejvyšší?