Bagikan melalui


Multithreading dengan C++ dan MFC

Nota

Pustaka Microsoft Foundation Classes (MFC) terus didukung. Namun, kami tidak lagi menambahkan fitur atau memperbarui dokumentasi.

Pustaka Microsoft Foundation Class (MFC) menyediakan dukungan untuk aplikasi multithreaded. Topik ini menjelaskan proses dan utas serta pendekatan MFC untuk multithreading.

Proses adalah instans aplikasi yang sedang dijalankan. Misalnya, saat Anda mengklik dua kali ikon Notepad, Anda memulai proses yang menjalankan Notepad.

Sebuah thread adalah jalur eksekusi dalam suatu proses. Saat Anda memulai Notepad, sistem operasi membuat proses dan mulai menjalankan alur utama proses tersebut. Ketika thread ini berakhir, proses juga berakhir. Utas utama ini disediakan ke sistem operasi oleh kode startup dalam bentuk alamat fungsi. Biasanya, itu adalah alamat fungsi main atau WinMain yang disediakan.

Jika Anda mau, Anda dapat membuat utas tambahan di aplikasi. Anda mungkin ingin melakukan ini untuk menangani tugas latar belakang atau pemeliharaan ketika Anda tidak ingin pengguna menunggu mereka selesai. Semua utas dalam aplikasi MFC diwakili sebagai objek CWinThread. Dalam kebanyakan situasi, Anda bahkan tidak perlu membuat objek ini secara eksplisit; sebagai gantinya, panggil fungsi pembantu kerangka kerja AfxBeginThread, yang membuat CWinThread objek untuk Anda.

MFC membedakan dua jenis utas: utas antarmuka pengguna dan utas pekerja. Utas antarmuka pengguna umumnya digunakan untuk menangani input pengguna dan merespons peristiwa dan pesan yang dihasilkan oleh pengguna. Thread pekerja umumnya digunakan untuk penyelesaian tugas, contohnya perhitungan ulang, yang tidak memerlukan masukan pengguna. API Win32 tidak membedakan antara jenis utas; itu hanya perlu mengetahui alamat awal utas sehingga dapat mulai menjalankan utas. MFC menangani utas antarmuka pengguna secara khusus dengan menyediakan mekanisme pengolahan pesan untuk peristiwa di antarmuka pengguna. CWinApp adalah contoh objek utas antarmuka pengguna, karena berasal dari CWinThread dan menangani peristiwa dan pesan yang dihasilkan oleh pengguna.

Perhatian khusus harus diberikan pada situasi di mana lebih dari satu utas mungkin memerlukan akses ke objek yang sama. Multithreading: Tips Pemrograman menjelaskan teknik yang dapat Anda gunakan untuk mengatasi masalah yang mungkin muncul dalam situasi semacam ini. Multithreading: Cara Menggunakan Kelas Sinkronisasi menjelaskan cara menggunakan kelas yang tersedia untuk menyinkronkan akses dari beberapa utas ke satu objek.

Menulis dan men-debug pemrograman multithread secara bawaan merupakan usaha yang kompleks dan rumit, karena Anda harus memastikan bahwa objek tidak diakses oleh lebih dari satu utas pada satu waktu. Topik multithreading tidak mengajarkan dasar-dasar pemrograman multithreaded, hanya cara menggunakan MFC dalam program multithreaded Anda. Contoh MFC multithread yang disertakan dalam Visual C++ mengilustrasikan beberapa penambahan fungsionalitas multithread dan API Win32 yang tidak dicakup oleh MFC, namun, mereka hanya dimaksudkan untuk menjadi titik awal.

Untuk informasi selengkapnya tentang cara sistem operasi menangani proses dan utas, lihat Proses dan Utas di Windows SDK.

Untuk informasi selengkapnya tentang dukungan multithreading MFC, lihat topik berikut ini:

Lihat juga

Dukungan Multithreading untuk Kode Lama (Visual C++)