Wpis z mikrobloga

Zawsze mnie nurtowało czemu aplikacje / gry zwieszają się na niektórych ekranach ładowania podczas losowych kliknięć myszą. Widziałem już artkuły wyjaśniające zachowanie ludzi przed komputerem, dlaczego klikają tak bez sensu, w momencie zwieszania aplikacji. Jednak dalej nie rozumiem co takiego dzieje się na tych losowych klikach myszy że tak je czasami zwieszają, podczas gdy aplikacja działała "normalnie", a klik nie wyzwala żadnej dodatkowej operacji.
Są jakieś wyzwalacze dodane na interfejsie które starają się dołożyć akcje w czasie ładowania tych aplikacji czy to zachowanie tylko czysto "windowsowe"? Nie dało by się zablokować po prostu odpowiednich handlerów odpowiedzialnych za łapanie takich operacji w czasie ekranu ładowania?
Pytanie może się pewnie wydawać się trywialne dla osób robiących oprogramowanie na Windows, ale dla mnie to czarna magia. Ze swojej strony programuję wyłącznie aplikacje webowe, więc nie była to kwestia, która bym się kiedykolwiek martwił.

#pcmasterrace #kiciochpyta #windows #programowanie
  • 8
@Tapporauta zagaduję że masz jakiś wątek który obsługuje już jakieś zadanie załadowania plików gry, co blokuje inną część programu obsługującą właśnie handlery kliknięć, windows oczekuje reakcji, reakcji nie ma, ergo program wisi, tak to sobie jedynie tłumaczę empirycznie, dajmy na to w grach których ekran ładowania jest w jakikolwiek sposób interaktywny (np. jest prosta animacja a nie jedynie pasek postępu, np. tak jak w Skyrim) takie zawieszenie nie występuje (albo nie pamiętam
@Tapporauta: Nie bawiłem się za bardzo apkami desktopowymi. Z tego co kojarzę to jak wątek obsługujący GUI jest zajęty jakąś operacją, to podczas kliknięcia windows oczekuje, że ten wątek odpowie w czasie x. Jeżeli tego nie robi (bo jest czymś zajęty) to zmienia ikonkę kursora, czy nawet wyszarza całe okno w celu poinformowania że aplikacja nie odpowiada. Słabo napisana aplikacja może tak działać
@Tapporauta: normalnie robi się tak, że jeden wątek obsługuje ui, a ciężkie operacje są robione w innych wątkach. W starych aplikacjach wszystko było robione na głownym wątku, bo prościej i procesory i tak były jednordzeniowe. W efekcie to póki nie zakończyła się blokująca operacja to nie dało się nić zrobić z oknem, bo eventy od windowsa czekają sobie w kolejce. Fajnie to widać w cs go jak ładuje się mapa. Jedyne
via Wykop Mobilny (Android)
  • 0
@Saly: no właśnie dziwię się że takie aplikacje jak Adobe Illustrator czy ekran ładowania LoLa, CS go, ciągle cierpią na te bolączki, ale dzięki za wyjaśnienie.
@Tapporauta: ja akurat robię aplikację desktopowe i dość często wykorzystuje się wątki, albo backgroundworkery jeśli chodzi o .net właśnie w celu uniknięcia "zwieszenia się programu", ale też żeby wykonać współbieżnie jakieś operacje. Jeśli chodzi o zwiechy w takich kombajnach od Adobe to raczej obstawiam duuuużo operacji na raz, a nie wykonywanie tego w wątku z GUI. Tak czy siak w webie też występują takie sytuacje, chyba, że mowa o froncie gdzie
@IJarzi: duże kombajny to dziesiątki lat klepania kodu na kolanie. Bardzo możliwe, że tak zostało to kiedyś napisane i teraz każdy boi się to przepisać.

chyba, że mowa o froncie gdzie strzelasz do api i wyświetlasz w tym czasie spinner ;)


@IJarzi: ale to jest przykład czekania obsługiwanego przez aplikację. Opowi chodziło o sytuację, że coś się ładuje, a aplikacja nie daje sygnałów życia