Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
CComMultiThreadModel menyediakan metode thread-safe untuk meningkatkan dan mengurangi nilai variabel.
Sintaks
class CComMultiThreadModel
Anggota
Typedef Publik
| Nama | Deskripsi |
|---|---|
| CComMultiThreadModel::AutoCriticalSection | Mereferensikan kelas CComAutoCriticalSection. |
| CComMultiThreadModel::CriticalSection | Mereferensikan kelas CComCriticalSection. |
| CComMultiThreadModel::ThreadModelNoCS | Mereferensikan kelas CComMultiThreadModelNoCS. |
Metode Publik
| Nama | Deskripsi |
|---|---|
| CComMultiThreadModel::D ecrement | (Statis) Mengurangi nilai variabel yang ditentukan dengan cara yang aman utas. |
| CComMultiThreadModel::Increment | (Statis) Menaikkan nilai variabel yang ditentukan dengan cara yang aman utas. |
Keterangan
Biasanya, Anda menggunakan CComMultiThreadModel melalui salah satu dari dua nama typedef, baik CComObjectThreadModel atau CComGlobalsThreadModel. Kelas yang dirujuk oleh masing-masing typedef tergantung pada model utas yang digunakan, seperti yang ditunjukkan dalam tabel berikut:
| typedef | Utas tunggal | Utas apartemen | Utas gratis |
|---|---|---|---|
CComObjectThreadModel |
S | S | M |
CComGlobalsThreadModel |
S | M | M |
S= CComSingleThreadModel; M= CComMultiThreadModel
CComMultiThreadModel itu sendiri mendefinisikan tiga typedef nama.
AutoCriticalSection dan CriticalSection kelas referensi yang menyediakan metode untuk mendapatkan dan merilis kepemilikan bagian penting.
ThreadModelNoCS kelas referensi [CComMultiThreadModelNoCS(ccommultithreadmodelnocs-class.md).
Persyaratan
Header: atlbase.h
CComMultiThreadModel::AutoCriticalSection
Saat menggunakan CComMultiThreadModel, nama typedef mereferensikan AutoCriticalSection kelas CComAutoCriticalSection, yang menyediakan metode untuk mendapatkan dan merilis kepemilikan objek bagian penting.
typedef CComAutoCriticalSection AutoCriticalSection;
Keterangan
CComSingleThreadModel dan CComMultiThreadModelNoCS juga berisi definisi untuk AutoCriticalSection. Tabel berikut menunjukkan hubungan antara kelas model utas dan kelas bagian penting yang dirujuk oleh AutoCriticalSection:
| Kelas yang ditentukan dalam | Kelas yang dirujuk |
|---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Selain AutoCriticalSection, Anda dapat menggunakan typedef nama CriticalSection. Anda tidak boleh menentukan AutoCriticalSection dalam objek global atau anggota kelas statis jika Anda ingin menghilangkan kode startup CRT.
Contoh
Kode berikut dimodelkan setelah CComObjectRootEx, dan menunjukkan AutoCriticalSection digunakan di lingkungan utas.
template<class ThreadModel>
class CMyAutoCritClass
{
public:
typedef ThreadModel _ThreadModel;
typedef typename _ThreadModel::AutoCriticalSection _CritSec;
CMyAutoCritClass() : m_dwRef(0) {}
ULONG InternalAddRef()
{
return _ThreadModel::Increment(&m_dwRef);
}
ULONG InternalRelease()
{
return _ThreadModel::Decrement(&m_dwRef);
}
void Lock() { m_critsec.Lock( ); }
void Unlock() { m_critsec.Unlock(); }
private:
_CritSec m_critsec;
LONG m_dwRef;
Tabel berikut menunjukkan hasil InternalAddRef metode dan Lock , tergantung pada ThreadModel parameter templat dan model utas yang digunakan oleh aplikasi:
ThreadModel = CComObjectThreadModel
| Metode | Threading Tunggal atau Apartemen | Utas Gratis |
|---|---|---|
InternalAddRef |
Kenaikan tidak aman utas. | Kenaikan adalah thread-safe. |
Lock |
Tidak melakukan apa-apa; tidak ada bagian penting untuk dikunci. | Bagian penting dikunci. |
ThreadModel = CComObjectThreadModel::ThreadModelNoCS
| Metode | Threading Tunggal atau Apartemen | Utas Gratis |
|---|---|---|
InternalAddRef |
Kenaikan tidak aman utas. | Kenaikan adalah thread-safe. |
Lock |
Tidak melakukan apa-apa; tidak ada bagian penting untuk dikunci. | Tidak melakukan apa-apa; tidak ada bagian penting untuk dikunci. |
CComMultiThreadModel::CriticalSection
Saat menggunakan CComMultiThreadModel, nama typedef mereferensikan CriticalSection kelas CComCriticalSection, yang menyediakan metode untuk mendapatkan dan merilis kepemilikan objek bagian penting.
typedef CComCriticalSection CriticalSection;
Keterangan
CComSingleThreadModel dan CComMultiThreadModelNoCS juga berisi definisi untuk CriticalSection. Tabel berikut menunjukkan hubungan antara kelas model utas dan kelas bagian penting yang dirujuk oleh CriticalSection:
| Kelas yang ditentukan dalam | Kelas yang dirujuk |
|---|---|
CComMultiThreadModel |
CComCriticalSection |
CComSingleThreadModel |
CComFakeCriticalSection |
CComMultiThreadModelNoCS |
CComFakeCriticalSection |
Selain CriticalSection, Anda dapat menggunakan typedef nama AutoCriticalSection. Anda tidak boleh menentukan AutoCriticalSection dalam objek global atau anggota kelas statis jika Anda ingin menghilangkan kode startup CRT.
Contoh
Lihat CComMultiThreadModel::AutoCriticalSection.
CComMultiThreadModel::D ecrement
Fungsi statis ini memanggil fungsi Win32 InterlockedDecrement, yang mengurangi nilai variabel yang ditunjukkan oleh p.
static ULONG WINAPI Decrement(LPLONG p) throw ();
Parameter
p
[di] Penunjuk ke variabel yang akan diderementasi.
Tampilkan Nilai
Jika hasil dari penurunan adalah 0, maka Decrement mengembalikan 0. Jika hasil penurunan bukan nol, nilai pengembalian juga bukan nol tetapi mungkin tidak sama dengan hasil penurunan.
Keterangan
InterlockedDecrement mencegah lebih dari satu utas secara bersamaan menggunakan variabel ini.
CComMultiThreadModel::Increment
Fungsi statis ini memanggil fungsi Win32 InterlockedIncrement, yang menaikkan nilai variabel yang ditunjukkan oleh p.
static ULONG WINAPI Increment(LPLONG p) throw ();
Parameter
p
[di] Penunjuk ke variabel yang akan dinaikkan.
Tampilkan Nilai
Jika hasil kenaikan adalah 0, maka Increment mengembalikan 0. Jika hasil kenaikan bukan nol, nilai yang dikembalikan juga bukan nol tetapi mungkin tidak sama dengan hasil kenaikan.
Keterangan
InterlockedIncrement mencegah lebih dari satu utas secara bersamaan menggunakan variabel ini.
CComMultiThreadModel::ThreadModelNoCS
Saat menggunakan CComMultiThreadModel, nama typedef mereferensikan ThreadModelNoCS kelas CComMultiThreadModelNoCS.
typedef CComMultiThreadModelNoCS ThreadModelNoCS;
Keterangan
CComMultiThreadModelNoCS menyediakan metode thread-safe untuk meningkatkan dan menurunkan variabel; namun, itu tidak menyediakan bagian penting.
CComSingleThreadModel dan CComMultiThreadModelNoCS juga berisi definisi untuk ThreadModelNoCS. Tabel berikut menunjukkan hubungan antara kelas model utas dan kelas yang dirujuk oleh ThreadModelNoCS:
| Kelas yang ditentukan dalam | Kelas yang dirujuk |
|---|---|
CComMultiThreadModel |
CComMultiThreadModelNoCS |
CComSingleThreadModel |
CComSingleThreadModel |
CComMultiThreadModelNoCS |
CComMultiThreadModelNoCS |
Contoh
Lihat CComMultiThreadModel::AutoCriticalSection.
Lihat juga
Kelas CComSingleThreadModel
Kelas CComAutoCriticalSection
CComCriticalSection Class
Gambaran Umum Kelas