/ / Kakao, Windows i wątki? - okna, kakao, wielowątkowość

Kakao, Windows i wątki? - okna, kakao, wielowątkowość

W oknach każdy wątek ma kolejkę komunikatów ikażda kolejka komunikatów będzie przetwarzać wiadomości dla okien posiadanych przez ten wątek. Oznacza to, że napisanie aplikacji, w której można utworzyć wątek z pętlą komunikatów i jednym (lub więcej) oknami, jest dość proste. Ignorując wszelkie problemy z aplikacjami, mamy teraz okna aplikacji, które będą kontynuować interakcję z użytkownikiem, nawet jeśli jedno z pozostałych okien jest zajęte w jakiejś modalnej operacji.

Teraz, podczas przenoszenia aplikacji do kakao, napotykamCóż, Konstruktor interfejsów. Co jest niespodzianką dla kogoś, kto oczekuje większej kontroli nad tworzeniem okien i konstrukcji pętli wiadomości. Niemniej jednak widzę, skąd pochodzi IB.

Mój problem polega jednak na nieprzejrzystej funckcjiNSApplicationMain (). To - w głównym wątku aplikacji automatycznie tworzy główne okno aplikacji i uruchamia pompę komunikatów, wszystkie dane ładnie ładują się z plików NIB.

Pozostaje mi jednak problem: Nawet jeśli wpadnę na pomysł, że Interface Builder to sposób na zrobienie mojego głównego okna aplikacji - i udało mi się znaleźć dość obiektywnego C, by stworzyć podokienię w locie - a także jak tworzyć wątki - mogę zobacz, jak stworzyć pompę komunikatów w wątkach roboczych, zaczynam wątpić w jej możliwości.

Czy okna w kakao mają nawet rodzaj nicipowinowactwo, które robią w Win32? tj. każdy wątek ma własną pętlę wysyłania wiadomości dla okien należących do tego wątku? Zaczynam podejrzewać, że być może Cocoa spodziewa się, że wszystkie moje okna będą "własnością" głównego wątku i po prostu skompensuję pracę (i rysunek) na inne wątki.

Jakieś wskazówki, jak najlepiej przetłumaczyć aplikację Win32 dla wielu okien na każdy wątek na paradygmaty Cocoa?

Odpowiedzi:

9 dla odpowiedzi № 1

Program Interface Builder jest czerwonym śledziem w tej dyskusji. Prawdziwe pytanie skupia się na wzorach projektowych Cocoa i te dwa akapity z twojego pytania są kluczowe:

Jednak to pozostawia mnie z problem: Nawet jeśli kupię ten pomysł to właśnie Interface Builder to sposób idź do zrobienia mojego głównego okna aplikacji - i Zorientowałem się wystarczająco obiektywnie C tworzyć podokna w locie - jako oraz jak tworzyć wątki - I może zobaczyć, jak utworzyć pompę komunikatów w wątkach roboczych. Zaczynam wątpić to jest możliwe.

Czy okna w kakao mają nawet ten rodzaj wątkupowinowactwo, które robią w Win32? tj. każdy wątek ma swoją własną wiadomość pętla dyspozytorska dla okien należących do ten wątek? Zaczynam podejrzewać że być może Cocoa spodziewa się wszystkiego okna mają być "własnością" głównego wątku i właśnie dostaję pracę offsetową (i rysowanie) na inne wątki.

Krótko mówiąc, nie, to nie działa w ten sposób: Cocoa ma zupełnie inny model obsługi zdarzeń i zupełnie inny zestaw narzędzi do obsługi Współbieżności.

Warto zauważyć, że Cocoa ma silne pojęcie o główna pętla zdarzeń który działa zawsze na głównym wątku. To tam odbywają się zdarzenia użytkownika i pojawia się prawie całe rysowanie (choć to ograniczenie zostało z czasem rozluźnione).

Jest inny i próbuje go zgiąć, aby działał tak, jak wątek na okienko z pompą jest ścieżką skrajnego bólu. Nie idź w dół.

Teraz, Cocoa robi uruchom pętle na wątek. Ale nie są one używane do przetwarzania zdarzeń użytkowników.

Krótko mówiąc, będziesz musiał ponownie przeanalizować architekturę swojej aplikacji, aby przenieść kod do Cocoa. Prosty port nie jest możliwy.