Re: COM und ThreadingModel

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



Hallo Jochen.

Danke, das war ausführlich und ich denke, ich habs geschnallt.

Verwirrend war eben, daß dieser (ohnehin komische) Borland-C++-Builder 6
wohl beim Registrieren der Out-Proc-Komponente auch das ThreadingModel in
der
Reg selbstständig und überflüssigerweise setzt.

Danke auch an alle anderen, die geantwortet haben.

MfG
Alfred Schlechter



"Jochen Kalmbach [MVP]" <nospam-Jochen.Kalmbach@xxxxxxxxx> schrieb im
Newsbeitrag news:O2MpIPlyFHA.3172@xxxxxxxxxxxxxxxxxxxxxxx
> 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
    ... COINIT_APARTMENTTHREADED) -> ThreadingModel = Apartment? ... 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 ... Prinzipiell kann das OS nur MTA und führt dann bei den einzelnen Threads die ein anderes als MTA haben, ...
    (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)