Pracuję nad projektem wtyczki, w którym używam przetwarzania w tle Eclipse.
Jaka jest różnica między metodami syncExec() i asyncExec() klasy Display? W jakich sytuacjach są one stosowane? Pomocny może być każdy przykład.Różnica między syncExec() i asyncExec() klasy Display
Odpowiedz
z Q: Why do I get the error "org.eclipse.swt.SWTException: Invalid thread access"?
Aby umożliwić nici tła do wykonywania operacji na obiektach należących do interfejsu gwintem, stosowane są metody syncExec (Runnable uruchamialny) i asyncExec (Runnable uruchamialny) wyświetlaczy. Są to jedyne metody w SWT, które można wywołać z dowolnego wątku. Pozwalają one na wykonywanie operacji przez wątek UI, synchronicznie, powodując, że wątek tła oczekuje na zakończenie operacji lub asynchronicznie pozwalając wątkowi tła kontynuować wykonywanie bez czekania na wynik. Operacja wykonywana przy użyciu metody syncExec() najbliżej odpowiada równoważnemu bezpośredniemu wywoływaniu operacji interfejsu użytkownika, ponieważ wywołanie metody Java zawsze czeka na wynik przed kontynuowaniem, podobnie jak syncExec().
Dodawanie do odpowiedzi Tom Seidel, oto są przykłady sytuacji, w których warto skorzystać z jednej lub drugiej strony:
Zastosowanie
asyncExec
gdy chcesz zaktualizować coś w interfejsie nie dbając o wyniki. Na przykład aktualizacja etykiety lub paska postępu.Użyj
syncExec
, gdzie kod następujący po wywołaniu tej metody musi być pewny, że interfejs jest w stałym stanie lub potrzebuje niektórych danych z interfejsu użytkownika. Na przykład pobieranie niektórych danych z okna dialogowego użytkownika. Możesz też zaktualizować widżet i zanim zrobisz cokolwiek innego (np. Inną aktualizację interfejsu użytkownika), chcesz wiedzieć, że aktualizacja widgetu została zakończona.
SWT implementuje model pojedynczego gwintowanego interfejsu użytkownika. W tym modelu tylko wątek UI może wywoływać operacje interfejsu użytkownika. Jeśli spróbujesz uzyskać dostęp do obiektu SWT spoza wątku UI, pojawi się wyjątek "org.eclipse.swt.SWTException: Nieprawidłowy dostęp do wątku". Aby umożliwić innym wątkom wykonywanie operacji na obiektach należących do wątku UI, SWT zapewnia metody syncExec i asyncExec.
Ten link może pomóc Ci z przykładem
- 1. Różnica między: [ScaffoldColumn (false)] a [Display (AutoGenerateField = false)]
- 2. Różnica między getElementsByClassName i querySelectorAll?
- 3. Różnica między odniesienia i wskaźników
- 4. Różnica między java.util.Scanner i java.util.Scanner. *
- 5. Różnica między fragmentem klasy a fragmentem obiektu
- 6. Różnica między org.apache.spark.ml.classification i org.apache.spark.mllib.classification
- 7. Różnica między unwrapObservable i()
- 8. Różnica między "**/* /" i "** /"?
- 9. Różnica między | = i^= css
- 10. Composer.phar różnica między | i ||
- 11. Różnica między "% ~ dp0" i ". \"?
- 12. Różnica między ". +" I ". +?"
- 13. MySQL: Różnica między ",", "i"
- 14. Różnica między wzorcem adaptera obiektu i wzorcem adaptera klasy
- 15. Różnica między projektem testowym C# i biblioteką klasy C# Projekt
- 16. Jaka jest różnica między URI i Uri klasy
- 17. Jaka jest różnica między classOf [T] i klasy [T]
- 18. Różnica między inicjalizacją ostatniej klasy zmiennej
- 19. Różnica między (++ i) oraz (i ++)
- 20. Różnica między ładowaniem klasy a jej instancją
- 21. Różnica między inicjowaniem klasy a instancją obiektu?
- 22. Jaka jest różnica między Verilog! i ~?
- 23. Różnica kręgosłupa Różnica między CompositeView i CollectionView?
- 24. Różnica między klasami narzędziowymi i pomocniczymi
- 25. Jaka jest różnica między "mutex" i "lock"?
- 26. Różnica między strumieniem strstream i stringami
- 27. jaka jest różnica między @ i @@ w module?
- 28. Różnica między logger.info i logger.debug
- 29. Różnica między fgets i fscanf?
- 30. Różnica między NSLog i DLog