SWT এর প্রধান লুপ দিয়ে ডিসপ্যাচ ব্যবহার করে

আমার java/jython অ্যাপ্লিকেশনটি 'ডিফল্ট' SWT প্রধান লুপ চালায়:

while not shell.isDisposed():
    if not display.readAndDispatch():
        display.sleep()

ম্যাক ওএস এক্স-এ, সমস্ত SWT-সম্পর্কিত কোডটি মূল থ্রেডে চালানোর প্রয়োজন:

from com.apple.concurrent import Dispatch

call = Dispatch.getInstance().getNonBlockingMainQueueExecutor().execute

class Main(Runnable):
    def run(self):
        # main loop here

call(Main())

এই পর্যন্ত সূক্ষ্ম কাজ করে। এখন সমস্যাযুক্ত অংশে: আমাকে কিছু সময়, Main.run পদ্ধতির বাইরে থেকে SWT-সম্পর্কিত কোডটি চালানো দরকার।

প্রধান লুপ চলাকালীন যখন আমি কল() ম্যাজিক ব্যবহার করি তখন থ্রেড ব্যস্ত হওয়ার পরে কিছুই ঘটে না (উপরে দেখানো অ্যাসিনক কলটি অবিলম্বে ফেরত দেয় তবে কোনও কোড কার্যকর করে না এবং সিঙ্ক্রোনাস কল ব্লকগুলি চিরতরে).

display.readAndDispatch() আসলে এই কলগুলি প্রক্রিয়া করতে হবে না? আমি এই থ্রেডে পরিষ্কার ফ্যাশন (যে, আমার নিজের একটি ইভেন্ট সারি নির্মাণ ছাড়া) কোডটি চালাতে পারেন কোন উপায় আছে?

প্রধান লুপের ভিতরে এই উপাদানটিকে পুনঃমূল্যায়ন করা তুলনামূলকভাবে সহজ, তবে আমি মনে করি আমি এখানে খুব সুস্পষ্ট কিছু অনুভব করছি।

1

1 উত্তর

এটিকে চিত্রিত করে, display.asyncExec ঠিক আছে।

0
যোগ