Konkurensi dan eksekusi

Konkurensi dan eksekusi

Alur menjalankan baris berurutan. “Blocking” berarti baris berikutnya menunggu, bukan aplikasi membeku. Flow.start() menjalankan alur lain bersamaan; parallel=True hanya mengantrekan sentuhan.

Alur latar

Flow.start() mengembalikan Int positif saat alur bernama siap menerima pesan; maksimal dua alur latar bersamaan. send() menyalin pesan berurutan; receive() menunggu, poll() memeriksa segera. Jeda menyimpan pesan; stop/selesai membuangnya. running() mencakup alur dijeda. Flow.stop(name) menghentikan alur latar pemilik; alur lain lanjut dan namanya tetap dicadangkan hingga pembersihan selesai. Grup bersarang bernama memakai pesan dan target stop pemiliknya; alur utama tidak dapat dihentikan begitu dan tidak punya nama otomatis. Makro menunggu pekerja: hentikan pekerja tanpa akhir secara eksplisit. Pause/Resume utama berlaku untuk semua; Resume global menghapus jeda individual. Kontrol latar menyediakan Pause/Resume, tanpa Stop. Start tidak valid/duplikat, kesalahan alur, Stop utama atau System.stop() menghentikan seluruh makro.

# Konfigurasikan alur makro bernama watch_enemy sebelum dijalankan
ordinal = Flow.start("watch_enemy", {"task": "status"})
print(ordinal)

Status bersama

Pisahkan objek yang dapat diubah tiap alur. Storage melindungi tiap operasi, termasuk perubahan dalam koleksi, tetapi alur lain dapat menulis di antara get() dan set(). Gunakan satu penulis agar pembaruan tidak tertimpa. Tangkapan layar, pemakaian ulang gambar dan pengaturan audio dibagikan. Tukar salinan pesan lewat Flow.send(), receive() dan poll().

Sentuhan dalam antrean

parallel=True mengantrekan sentuhan tanpa menunggu selesai; delay_before, delay_after tetap menunggu di luar collect. Touch.collect() mengumpulkan, Touch.send() mengirim, dan Touch.wait() menunggu. Gestur antaralur dapat saling membatalkan pada layar bersama. Pembatalan gestur aktif memerlukan Android 8 atau lebih baru.

# Kumpulkan sentuhan yang tumpang tindih, lalu tunggu hingga selesai
Touch.collect()
click((300, 900), hold_ms=1500, parallel=True)
click((780, 900), delay_before=500, parallel=True)
Touch.send()
Touch.wait()

Pengenalan dan menunggu UI

Region.find* mencari kemunculan; Region.wait* menunggu hilangnya target. Satu pemeriksaan tetap memerlukan waktu; laju pengulangan 1–60 kali/detik. Dialog MacroPanel menunggu, satu per satu. show(mode="floating") lanjut dengan satu panel mengambang per proses; baca kontrol dengan values(), tutup dengan close(). OverlayText.off_all() hanya menghapus overlay alur ini; pembaruan tampilan dapat menunggu.