Qanday qilib GUI ilovasidan QThreadni bekor qilish kerak?

QThread sinfida self.terminate() va GUI sinfidagi self.thread.terminate() dan foydalanib harakat qildim. Ikkala holatda ham self.wait() ni qo'yishga harakat qildim. Biroq, ikkita senaryor mavjud:

1) ish zarra tugamaydi va GUI tugunni tugatish uchun kutib turadi. Vaqt tugashi bilan GUI echimini topadi va har bir narsa normal holatga qaytadi.

2) Ish zarra tugamaydi, lekin ayni paytda barcha ilovani muzlatadi.

Bundan tashqari, self.thread.exit() dan foydalanib harakat qildim. Hech qanday quvonch.

Keyinchalik aniqlik kiritish uchun men GUI-da abort tugmachasini amalga oshirishga harakat qilmoqdaman, bu esa ishning istalgan vaqtda bajarilishini to'xtatadi.

Oldindan rahmat.

EDIT:

Mana, run() usuli:

def run(self):
    if self.create:
        print "calling create f"
        self.emit(SIGNAL("disableCreate(bool)"))
        self.create(self.password, self.email)
        self.stop()            
        self.emit(SIGNAL("finished(bool)"), self.completed)

def stop(self):
     #Tried the following, one by one (and all together too, I was desperate):
     self.terminate()
     self.quit()
     self.exit()
     self.stopped = True
     self.terminated = True
     #Neither works

Va ish zarrachasini bekor qilish uchun GUI klassi usuli:

def on_abort_clicked(self):
     self.thread = threadmodule.Thread()
     #Tried the following, also one by one and altogether:
     self.thread.exit()
     self.thread.wait()
     self.thread.quit()
     self.thread.terminate()
     #Again, none work
3
Rahmat, lekin bu muammoni hal qilishda yordam bermaydi.
qo'shib qo'ydi muallif Bo Milanovich, manba
Bu, albatta, men izlayotgan narsa emas.
qo'shib qo'ydi muallif Bo Milanovich, manba
Eslatma: self.terminate === (self.terminated = true), boshqa hech narsa. Barcha dasturlarning 99% uchun.
qo'shib qo'ydi muallif TheHorse, manba
Ish zarrachalarining xavfsizligini bekor qilishning yagona yo'li bor - bu vazifalarni bajarishga ruxsat bering. Uni bajarish uchun siz qattiq ishlarni bajarishdan avval thread.terminated tekshirishingiz kerak.
qo'shib qo'ydi muallif TheHorse, manba

1 javoblar

Qt xujjatlari uchun QThread :: terminatsiyasidan:

Ogohlantirish : Ushbu funktsiya xavfli va uni ishlatishdan foydalanilmaydi. Ushbu   ipning kodi yo'lining istalgan nuqtasida tugatilishi mumkin. Mavzular bo'lishi mumkin   ma'lumotlar o'zgartirilganda to'xtatildi. Mavzu uchun imkoniyat yo'q   o'zidan keyin tozalash, har qanday muttasilni ochish va h.k. Qisqasi, foydalanish   bu funktsiya faqat agar kerak bo'lsa.

Ehtimol, tishlash strategiyangizni qayta ko'rib chiqish siz uchun juda yaxshi fikrdir. Qisqa ishlov berishni to'xtatish uchun ipni tozalamasdan ishdan chiqish uchun signalni ko'rsatish uchun QThread :: quit() dan foydalaning. Aslida thread.exit() ni ish zarrachasidan chaqirib, run() ni qanday amalga oshirganingizga qarab amalga oshirishi kerak. Agar siz ishlamayotgan bo'lsa, nima uchun ish zarrachasini bajarish usulini kodingiz bilan baham ko'rmoqchi bo'lsangiz.

5
qo'shib qo'ydi
Salom, rahmat. Pochta kodini qo'shib qo'ydim.
qo'shib qo'ydi muallif Bo Milanovich, manba
Buni ham sinab ko'rdim. Bir oz ishlashi mumkin edi (GUI dondurulmazdı, lekin ish zarra tugamadi). Biroq eng g'alati narsa sodir bo'ldi. Ishning barcha def stop (self) kodini va GUIdagi def on_abort_clicked (self) kodini o'chirib tashladim va uni qayta yozdim. stop() funktsiyasida self.terminate() ni qo'ygan edim va GUI sinfidagi self.thread.stop() ni qildim. Jozibasi kabi ishlaydi. AFAIK, bu men birinchi marta ishlaganman va bu avval ishlamagan. Ehtimol, biror narsani o'tkazib yubordim.
qo'shib qo'ydi muallif Bo Milanovich, manba
Hmm. Va self.create() usuli ish zarrachalaridan foydalanishning usuli hisoblanadi? Odatda u erda nima qilmoqchi bo'lsangiz, u holda self.terminated() {sekin ishlaydigan qismlar ..} bo'lsa, kabi bir narsa bor. Afsuski, men Pythonni yaxshi bilmayman, lekin u erda ishlaydigan bir o'qituvchi kabi ko'rinadigan ko'rinadi bu yerda Yordam bering
qo'shib qo'ydi muallif docsteer, manba
Python
Python
372 ishtirokchilar

Bu guruh python dasturlash tilini muhokama qilish uchun. Iltimos, o'zingizni hurmat qiling va faqat dasturlash bo'yicha yozing. Botlar mavzusini @botlarhaqida guruhida muhokama qling! FAQ: @PyFAQ Offtopic: @python_uz_offtopic

Python offtopic group !
Python offtopic group !
150 ishtirokchilar

@python_uz gruppasining offtop gruppasi. offtop bo'lsa ham reklama mumkin emas ) Boshqa dasturlash tiliga oid gruppalar @languages_programming