COM是如何实现STA的

Rather than using thread synchronization objects (mutexes, semaphores, and so forth) to control access to an object by several threads, the marshaling process for STAs translates the call into a WM_USER message and posts the result to a hidden top-level window associated with the apartment when it was created. Calls from several different threads are converted and sent to wait in the apartment‘s message queue until they are retrieved, dispatched, and executed on the apartment‘s thread. This process controls access to an apartment‘s objects by forcing incoming calls to pass through a sort of turnstile, thereby rendering the object‘s interface implementations thread-safe. An additional benefit of using the message queue is that inter-apartment COM calls are synchronized with window messages, which provides a means for objects that interact with users to synchronize incoming COM calls with the operation of the user interface (UI).

也就是说基于消息队列,串行化调用请求实现单线程模式。

时间: 2024-10-06 09:43:04

COM是如何实现STA的的相关文章

[BZOJ1131][POI2008] Sta 树的深度

Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output 输出你所找到的点,如果具有多个解,请输出编号最小的那个. Sample Input81 45 64 56 76 82 43 4 Sample Output7 题解: 都说是裸树形DP,其实我做的时候就是把它当成搜索去做了,当然是一个意思.假设当前的根为1,先求出每棵子树的大小,以及所有点的深度之和.考虑

1131: [POI2008]Sta

1131: [POI2008]Sta Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 783  Solved: 235[Submit][Status] Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output 输出你所找到的点,如果具有多个解,请输出编号最小的那个. Sample Input 8 1 4 5 6

【转载】STA 4273H Winter 2015 - Lectures

STA4273H Home   Lecture Schedule/Notes Assignments/Project Computing   Ruslan Salakhutdinov Homepage http://www.cs.toronto.edu/~rsalakhu/   STA 4273H Winter 2015 - Lectures Video Archive here. Lecture Schedule Lecture 1 -- Machine Learning:Introducti

FolderBrowserDialog 关于设置为单线程单元(STA)模式的问题

当Main函数是这样的状态的时候,当打开FolderBrowserDialog控件的时候 ,报错 这里有两种解决办法,第一种,就是把main 上加[STAThread] 第二种是启用一个线程 Thread newThread = new Thread(new ThreadStart(ToOpenBD));//初始化线程 参数是委托  ToOpenBD是方法名字,没有参数            newThread.SetApartmentState(ApartmentState.STA);//设置

BZOJ 1131: [POI2008]Sta

1131: [POI2008]Sta Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1370  Solved: 486[Submit][Status][Discuss] Description 给出一个N个点的树,找出一个点来,以这个点为根的树时,所有点的深度之和最大 Input 给出一个数字N,代表有N个点.N<=1000000 下面N-1条边. Output 输出你所找到的点,如果具有多个解,请输出编号最小的那个. Sample Input

Timequest静态时序分析(STA)基础

Setup Slack Hold Slack Recovery&Removal Recovery: The minimum time an asynchronous signal must be stable BEFORE clock edgeRemoval  : The minimum time an asynchronous signal must be stable AFTER clock edge I/O Analysis Analyzing I/O performance in a s

用shell脚本实现linux系统上wifi模式(STA和soft AP)的转换

转载请注明出处:http://blog.csdn.net/hellomxj1/ 功能:在linux系统上实现wifi STA与AP功能的转换 实现成果:1.添加wifi密码账户add_wifi_account: 2.wifi两种模式启动的脚本wifi_start: 3.帮助信息README_WIFI_START: 具体实现过程如下: 添加wifi密码账户add_wifi_account 1 #!/bin/sh 2 3 echo "Add Wifi Account ..." 4 5 if

在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute标记。 多线程操作剪切板的时候。

最近做一个蛋疼的东西就是C#调用windows API 来操作一个 软件,自动处理一些东西.要用到剪切板复制 粘贴功能,即 Clipboard.SetDataObject(filedic, true)等. 本来测试的时候,通过主线程 按钮点击开始的时候没有任何问题.但是把整个过程放在一个单独一个线程的时候一到复制的时候就报错, “在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式,请确保您的Main函数带有STAThreadAttribute标记”.但是查看我的主线程main

STA和MTA线程模式的区别

文章来源: http://blog.csdn.net/fragno/article/details/7982044 STA:   Single-Thread   Apartment,   中文叫单线程套间.就是在COM库初始化的时候创建一个内存结构,然后让它和调用CoInitialize的线程相关联.这个内存结构针对每个线程都会有一个.支持STA的COM对象只能在创建它的线程里被使用,其它线程如果再创建它就会失败. MTA:   Mutil-Thread   Apartment,中文叫多线程套间

How to use STA(sql tuning advisor)

一.手工生成Sql tuning advisor 1.SQL text format: DECLARE my_task_name VARCHAR2(30); my_sqltext   CLOB; BEGIN my_sqltext := 'SELECT * FROM DBA_SEGMENTS WHERE OWNER=''CLIC'' AND SEGMENT_TYPE=''TABLE'''; my_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(sql_te