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)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.