{"id":49,"date":"2009-05-21T21:25:16","date_gmt":"2009-05-21T19:25:16","guid":{"rendered":"http:\/\/wawszczak.pr0.pl\/?p=49"},"modified":"2009-05-21T21:25:16","modified_gmt":"2009-05-21T19:25:16","slug":"uwaga-na-kolejnosc-tworzenia-obiektow-modyfikujacych-stan-watkow","status":"publish","type":"post","link":"https:\/\/wawszczak.pr0.pl\/en\/2009\/05\/21\/uwaga-na-kolejnosc-tworzenia-obiektow-modyfikujacych-stan-watkow\/","title":{"rendered":"Uwaga na kolejno\u015b\u0107 tworzenia obiekt\u00f3w modyfikuj\u0105cych stan w\u0105tk\u00f3w"},"content":{"rendered":"<p>Sytuacja przedstawiona przez <a href=\"http:\/\/temporal.pr0.pl\/devblog\">Temporala<\/a>:<br \/>\nKlasa aplikacji tworz\u0105ca w funkcji Run() obiekt managera zada\u0144 wykonywanych przez system.<br \/>\nJednym z zada\u0144 jest przechwytywanie fakt\u00f3w wci\u015bni\u0119cia klawiszy niezale\u017cnie od tego jakie okno jest aktualnie aktywne (mam nadziej\u0119, \u017ce Temp wkr\u00f3tce szerzej opisze rozwi\u0105zanie). Istot\u0105 jest fakt, \u017ce dokonuje si\u0119 to przez modyfikacj\u0119 zachowania p\u0119tli komunikat\u00f3w aktywowanej przez Application.Run().<br \/>\nOczywistym jest, \u017ce zadanie to jest reprezentowane przez odr\u0119bn\u0105 klas\u0119, kt\u00f3rej instacj\u0119 tworzy Manger. W tym konstruktorze wykonywane s\u0105 wszystkie czynno\u015bci zwi\u0105zane ze zmian\u0105 zachowania p\u0119tli komunikat\u00f3w (inicjalizacja kolejnego obiektu zarz\u0105dzaj\u0105cego wywo\u0142aniami WinApi z C#). Nast\u0119pnym krokiem jest utworzenie przez Managera w\u0105tku uruchamiaj\u0105cego funkcj\u0119 Start() modu\u0142u, kt\u00f3ra jest zawieszana w p\u0119tli komunikat\u00f3w przez wywo\u0142anie Application.Run().<br \/>\nDoda\u0107 nale\u017cy \u017ce zmiana zachowania p\u0119tli komunikat\u00f3w dokonywana jest lokalnie dla w\u0105tku.<\/p>\n<p>Efektem wykonania niniejszej sekwencji by\u0142o NIC. Aplikacja si\u0119 wykonywa\u0142a, nie prezentuj\u0105c \u017cadnych efekt\u00f3w. Po wielu pr\u00f3bach i stworzeniu dodatkowych dw\u00f3ch w\u0105tk\u00f3w uda\u0142o si\u0119 stwierdzi\u0107, \u017ce system pracuje poprawnie tylko w sytuacji gdy zablokuje w si\u0119 p\u0119tli komunikat\u00f3w w\u0105tek mangera. TeMPOraL zacz\u0105\u0142 si\u0119 denerwowa\u0107, powiedzia\u0142em mu &#8220;Daj mi tego Kompa, w\u0105tki nie znaj\u0105 telepatii, chc\u0119 to prze\u015bledzi\u0107&#8221;. On mi na to, to ju\u017c jest do\u015b\u0107 z\u0142o\u017cony projekt, i nie przebij\u0119 si\u0119. Nie da\u0142em za wygran\u0105, zacz\u0105\u0142em od EntryPoint&#8217;a. Mniejsza. Po opisie kt\u00f3ry przytoczy\u0142em i po tytule tego posta ju\u017c wida\u0107, gdzie tkwi problem. Konstruktor obiektu roboczego modyfikowa\u0142 nie t\u0119 p\u0119tl\u0119 komunikat\u00f3w, kt\u00f3r\u0105 powinien. <\/p>\n<p>Solution by\u0142o proste. Przenie\u015b\u0107 inicjalizacj\u0119 obiektu zarz\u0105dzaj\u0105cego WinApi do wn\u0119trza funkcji Start(). To pokazuje dlaczego kolejno\u015b\u0107 tworzenia &#8220;W\u0105tkowych&#8221; obiekt\u00f3w jest bardzo wa\u017cna. Dobra rada &#8211; uwa\u017cajcie!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sytuacja przedstawiona przez Temporala: Klasa aplikacji tworz\u0105ca w funkcji Run() obiekt managera zada\u0144 wykonywanych przez system. Jednym z zada\u0144 jest przechwytywanie fakt\u00f3w wci\u015bni\u0119cia klawiszy niezale\u017cnie od tego jakie okno jest aktualnie aktywne (mam nadziej\u0119, \u017ce Temp wkr\u00f3tce szerzej opisze rozwi\u0105zanie). &hellip; <a href=\"https:\/\/wawszczak.pr0.pl\/en\/2009\/05\/21\/uwaga-na-kolejnosc-tworzenia-obiektow-modyfikujacych-stan-watkow\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-49","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/wawszczak.pr0.pl\/en\/wp-json\/wp\/v2\/posts\/49","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wawszczak.pr0.pl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wawszczak.pr0.pl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wawszczak.pr0.pl\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wawszczak.pr0.pl\/en\/wp-json\/wp\/v2\/comments?post=49"}],"version-history":[{"count":1,"href":"https:\/\/wawszczak.pr0.pl\/en\/wp-json\/wp\/v2\/posts\/49\/revisions"}],"predecessor-version":[{"id":50,"href":"https:\/\/wawszczak.pr0.pl\/en\/wp-json\/wp\/v2\/posts\/49\/revisions\/50"}],"wp:attachment":[{"href":"https:\/\/wawszczak.pr0.pl\/en\/wp-json\/wp\/v2\/media?parent=49"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wawszczak.pr0.pl\/en\/wp-json\/wp\/v2\/categories?post=49"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wawszczak.pr0.pl\/en\/wp-json\/wp\/v2\/tags?post=49"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}