Bagikan melalui


Multithreading: Membuat Utas Antarmuka Pengguna MFC

Utas antarmuka pengguna umumnya digunakan untuk menangani input pengguna dan menanggapi peristiwa pengguna secara independen dari utas yang menjalankan bagian lain dari aplikasi. Utas aplikasi utama (disediakan di kelas -turunan Anda CWinApp) sudah dibuat dan dimulai untuk Anda. Topik ini menjelaskan langkah-langkah yang diperlukan untuk membuat utas antarmuka pengguna tambahan.

Hal pertama yang harus Anda lakukan saat membuat utas antarmuka pengguna adalah mendapatkan kelas dari CWinThread. Anda harus mendeklarasikan dan mengimplementasikan kelas ini, menggunakan makro DECLARE_DYNCREATE dan IMPLEMENT_DYNCREATE . Kelas ini harus mengambil alih beberapa fungsi dan dapat mengambil alih fungsi lain. Fungsi-fungsi ini dan apa yang harus mereka lakukan disajikan dalam tabel berikut.

Fungsi untuk Mengambil Alih Saat Membuat Utas Antarmuka Pengguna

Fungsi Tujuan
ExitInstance Lakukan pembersihan saat utas dihentikan. Biasanya ditimpa.
InitInstance Lakukan inisialisasi instans utas. Harus ditimpa.
OnIdle Lakukan pemrosesan waktu diam khusus utas. Tidak biasanya ditimpa.
PreTranslateMessage Filter pesan sebelum dikirim ke TranslateMessage dan DispatchMessage. Tidak biasanya ditimpa.
ProcessWndProcException Mencegat pengecualian yang tidak tertangani yang dilemparkan oleh penangan pesan dan perintah utas. Tidak biasanya ditimpa.
jalankan Fungsi pengontrol untuk utas. Berisi pompa pesan. Jarang ditimpa.

MFC menyediakan dua versi AfxBeginThread melalui kelebihan beban parameter: satu yang hanya dapat membuat utas pekerja dan satu yang dapat membuat utas antarmuka pengguna atau utas pekerja. Untuk memulai utas antarmuka pengguna Anda, panggil kelebihan beban kedua AfxBeginThread, memberikan informasi berikut:

  • RUNTIME_CLASS kelas yang Anda dapatkan dari CWinThread.

  • (Opsional) Tingkat prioritas yang diinginkan. Defaultnya adalah prioritas normal. Untuk informasi selengkapnya tentang tingkat prioritas yang tersedia, lihat SetThreadPriority di Windows SDK.

  • (Opsional) Ukuran tumpukan yang diinginkan untuk utas. Defaultnya adalah tumpukan ukuran yang sama dengan alur pembuatan.

  • (Opsional) CREATE_SUSPENDED jika Anda ingin utas dibuat dalam status ditangguhkan. Defaultnya adalah 0, atau mulai utas secara normal.

  • (Opsional) Atribut keamanan yang diinginkan. Defaultnya adalah akses yang sama dengan utas induk. Untuk informasi selengkapnya tentang format informasi keamanan ini, lihat SECURITY_ATTRIBUTES di Windows SDK.

AfxBeginThread melakukan sebagian besar pekerjaan untuk Anda. Ini membuat objek baru kelas Anda, menginisialisasinya dengan informasi yang Anda berikan, dan memanggil CWinThread::CreateThread untuk mulai menjalankan utas. Pemeriksaan dilakukan di seluruh prosedur untuk memastikan semua objek dibatalkan alokasinya dengan benar jika bagian mana pun dari pembuatan gagal.

Apa yang ingin Anda ketahui lebih lanjut?

Lihat juga

Multithreading dengan C++ dan MFC