Re: COM und ThreadingModel

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



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



Relevant Pages

  • Re: COM und ThreadingModel
    ... ich kann über diese Parameter das ThreadingModel ... > Das CoInitializebetrifft nur Deinen Thread... ... > d.h. dieser InProc-Server kann nur das STA-Model und muss, ... > MTA laufen ohne das zusätzlich was getan werden muss ...
    (microsoft.public.de.vc)
  • Re: Question for the experts: recordset threading model
    ... > I did a registry search and found that the threadingmodel for the ... it should be "Apartment" ... ... > recordset will have a very small amount of data in it. ... Please reply to the newsgroup. ...
    (microsoft.public.inetserver.asp.db)
  • Re: Activator.CreateInstance locks in STAThread
    ... that means that the component is not designed to be accessed from multiple threads, changing the model toe "Apartment" is in general not a good idea, as the component was not really designed to live in an STA other than the 'main STA'. ... MTA or STA are NO legal values for "ThreadingModel". ... I for one would never use such an object in today's code, it was written for singled threaded applications, .NET applications are multi-threaded by default. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: COM und ThreadingModel
    ... in welchem ThreadingModel sich meine App befindet. ... Eine App kann sich in mehreren COM-Threading-Models befinden! ... Wenn Du Dein Eintrag aber trotzdem machen willst, ist es das einfachste, ...
    (microsoft.public.de.vc)
  • RE: CAPICOM Thread Capability?
    ... The CAPICOM 's ThreadingModel is marked as"Both". ... Sometimes the neutral apartment is similar to the MTA, ... the methods execute on the thread of the caller. ...
    (microsoft.public.platformsdk.security)