Re: COM und ThreadingModel
- From: "Jochen Kalmbach [MVP]" <nospam-Jochen.Kalmbach@xxxxxxxxx>
- Date: Thu, 06 Oct 2005 10:56:32 +0200
Hallo Alfred!
Das ist ein Registry-Eintrag wie jeder andere. Brauchst Du grundsätzliche Informationen, wie man auf die Registry zugreift?
Nein, ich wollte wissen wie der Eintrag in der Reg "ThreadingModel = Apartment" zustande kommt. Wer setzt ihn, CoInitialize ?
Ich kenne zwei Aufrufparameter für CoInitializeEx: COINIT_APARTMENTTHREADED und COINIT_MULTITHREADED Ich dachte immer, ich kann über diese Parameter das ThreadingModel bezüglich eines Threads festlegen. CoInitializeEx(NULL, COINIT_APARTMENTTHREADED) -> ThreadingModel = Apartment ? CoInitializeEx(NULL, COINIT_MULTITHREADED) -> ThreadingModel = ?
Das hat aber mit der Registry gar nichts zu tun... Das CoInitialize(Ex) betrifft nur Deinen Thread...
Nun steht in der MSDN (Selecting a Threading Model), daß es vier Threading-Modelle gibt: Single (not recommended), Apartment (recommended), Free(not recommended), Both(recommended)
Ergo: 2 Aufrufparameter, aber 4 Threading-Modelle ! Oder gibt es da keinen Zusammenhang ?
Hier gibt es nur bedingt einen Zusammenhang. Prinzipiell gibt es zwei Grundsätzliche Dinge zu unterscheiden:
1. Das Threading-Model eines Threads Hier gibt es zwei Möglichkeiten: - Apartment-Threaded (auch Single-Threaded genannt) - Multi-Threaded (auch Free-Threaded genannt)
2. Das Threading-Model eine InProc-Servers (in der Registry eingetragen)
Hier gibt es dann die Unterscheidung:
- Apartment
d.h. dieser InProc-Server kann nur das STA-Model und muss, wenn es in einer MTA-Umgebung verwendet wird, entsprechend gemarshallt werden
- Free
d.h. dieser InProc-Server kann nur in einer MTA-Umgebung laufen und muss deshalb, wenn er in einer STA-Umgebung verwendet wird, entsprechend gemarshallt werden
- Single
d.h. es darf nur in seinem eigenen Thread laufen und muss sowohl für STA als auch für MTA gemarshallt werden
- Both
d.h. der InProc-Server kann sowohl in einem STA als auch in einem MTA laufen ohne das zusätzlich was getan werden muss
Dann gibt es noch den Out-Proc-Server. Hier spielt aber das COM-Threading-Model keine Rolle, da es nur für den Prozess intern verwendet wird und über Prozessgrenzen hinweg eh gemarshallt werden muss.
Prinzipiell kann das OS nur MTA und führt dann bei den einzelnen Threads die ein anderes als MTA haben, das marshalling/synchronisierung entsprechend durch.
-- Greetings Jochen
My blog about Win32 and .NET http://blog.kalmbachnet.de/ .
- Follow-Ups:
- Re: COM und ThreadingModel
- From: Alfred Schlechter
- Re: COM und ThreadingModel
- References:
- COM und ThreadingModel
- From: Alfred Schlechter
- Re: COM und ThreadingModel
- From: Jochen Kalmbach [MVP]
- Re: COM und ThreadingModel
- From: Jochen Kalmbach [MVP]
- Re: COM und ThreadingModel
- From: Alfred Schlechter
- Re: COM und ThreadingModel
- From: Eberhard Schefold
- Re: COM und ThreadingModel
- From: Alfred Schlechter
- COM und ThreadingModel
- Prev by Date: Re: COM und ThreadingModel
- Next by Date: Re: CFile try/catch
- Previous by thread: Re: COM und ThreadingModel
- Next by thread: Re: COM und ThreadingModel
- Index(es):
Relevant Pages
|