当前位置: 首页 > news >正文

网站没有备案可以做百度推广吗昆明网络推广公司排名

网站没有备案可以做百度推广吗,昆明网络推广公司排名,树状结构的网站,域名论坛网站首先了解一下com组件,这样我们才能明白初始化com库的作用,用到两个API:CoInitialize,CoInitializEX 一、什么是COM组件 1、COM是Component Object Model (组件对象模型)的缩写 2、COM组件是以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代…

首先了解一下com组件,这样我们才能明白初始化com库的作用,用到两个API:CoInitialize,CoInitializEX

一、什么是COM组件

1、COM是Component Object Model (组件对象模型)的缩写
2、COM组件是以WIN32动态链接库(DLL)或可执行文件(EXE)形式发布的可执行代码组成。
3、COM组件是遵循COM规范编写的
4、COM组件必须是动态链接的
5、COM组件不是一种计算机语言
6、COM组件不是DLL,只是利用DLL来给组件提供动态链接的能力
7、COM组件不是一个API函数集。
8、COM组件不是类,COM 就是一套接口规范,就好象交通规则一样
9、可以供多种语言调用,跨语言的调用
10、COM中的接口是一组由组件实现的提供给客户使用的函数。基于二进制接口
《Inside C++ Object Model》
《COM本质论》
《COM+技术内幕》

视频教程:

511遇见易语言模块API教程

二、认识大漠插件

Dm.dll插件目前是用COM架构设计的,属于第三方COM对象,要想在我们自己的程序里引用(同进程内调用),需要注册,或免注册直接调用。
大漠综合插件(dm.dll)采用vc6.0编写,是一款集前后台,文字识别,图色,键鼠,窗口,内存,DX,Call等功能于一身的综合插件。主要用于按键精灵、简单游、易语言等辅助制作工具,具有识别速度超级快的特点! 采用COM接口编写,适用于所有语言调用。

三、初始化COM

1、CoInitialize

CoInitialize是Windows提供的API函数,用来告诉 Windows以单线程的方式创建com对象。
应用程序调用com库函数(除CoGetMalloc(获取对默认的OLE任务内存分配器指针)和内存分配函数)之前必须初始化com库。

CoInitialize(0)

多线程里创建COM对象前先初始化,一个线程只调用一次,

CoInitialize(0)
dm.创建 ()

2、CoInitializeEx

是 Windows提供的API函数,为当前线程初始化COM库并设置并发模式 。应用程序调用com库中的函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。

CoInitializeEx(0,0)

函数原型

HRESULT CoInitializeEx(
void * pvReserved,
DWORD dwCoInit
);
<strong class="text-danger"> 参数介绍:</strong>
pvReserved
系统 保留的参数,必须传入 NULL.
dwCoInit

该标示指明基于当前线程的并发模式和初始化选项。该参数是 COINIT 枚举类型,传入参数时候,除了
COINIT_APARTMENTTHREADED 和COINIT_MULTITHREADED标记外,其余的标记可以组合使用。
在应用程序中使用COM库,至少要调用一次CoInitializeEx函数(通常也就调用一次)。如果传入参数的并发标志相同,单个线程也可以多次调用该函数

3、CoUninitialize

关闭当前线程的COM库,卸载线程加载的所有dll,释放任何其他的资源,关闭在线程上维护所有的连接。
CoInitialize、CoInitializeEx都是windows的API,主要是告诉windows以什么方式为程序创建COM对象。
有哪些方式呢?单线程和多线程。
CoInitialize指明以单线程方式创建。
CoInitializeEx可以指定以多线程方式创建。
创建单线程方式的COM服务器时不用考虑串行化问题,多线程COM服务器就要考虑。
在使用中,使用CoInitialize创建可使对象直接与线程连接,得到最高的性能。
创建多线程对象可以直接接收所有线程的调用,不必像单线程那样需要消息排队,但却需要COM创建线程间汇集代理,这样访问效率高。
CoInitialize对windows来说可能只是设置一个标志
CoUninitialize可能只是清除标志。

CoInitialize和CoUninitialize最好在应用程序初始化以及退出时调用,样例中在构造以及析构中调用是不提倡的做法。

当调用CoUninitialize这个函数的时候,会关掉其所做的线程。那么如果你的应用在运行的时候只有一个进程,而且该进程也仅有一个线程的话,那么调用该函数自然会导致整个应用的退出。

根据线程模型划分,进程内COM组件分为四类:Single,Apartment,Free,Both

COM套间类型为两类:STA和MTA,STA是单线程套间,只能运行一个线程,但是一个进程内可以创建多个STA,STA总是与一个线程相关联,其中第一次创建的STA通常成为主STA(Main STA);MTA是多线程套间,一个进程内只能有一个MTA,但是MTA允许运行多个线程。
一个线程要进入到STA中还是MTA中,是由线程内调用CoInitializeEx函数的第二个参数决定的。
CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);进入到STA(相当于调用CoInitialize(NULL);)
CoInitializeEx(NULL, COINIT_MULTITHREADED);进入到MTA

注意:在不再需要的时候,调用CoUninitialize();退出套间,一般CoInitializeEx与CoUninitialize都需要成对调用,以释放COM占用的资源。

四、CoInitializeEx 与CoInitialize的区别

1、多线程崩溃和使用CoInitialize或CoInitializeEX没有关系
这里也不能说CoInitializeEX(0,0)更适合易语言,而是更适合高并发。
因为CoInitializeEX内部有锁机制,效率更慢,而需要用内存换效率。
2、多线程和高并发不是一回事极端高并发下崩溃
3、所以,在某种环境下,两者是一致的。 而高并发可能让CoInitialize堵塞了
4、后来的应使用CoInitializeEX,但是调用大量早期的历史Com库,是使用的CoInitialize
5、有的时候,高并发崩溃了,真的没有办法,因为那超过了机器的处理能力,只能限制。
虽然我们动不动就多线程的说法,但是,实际上我们的CPU常见的也就是4核心。那么真正在运行的也就是4条线程
所以,线程数量,不是越多越好的。切换时间片的时间,都够执行很多的代码了。线程多了反而造成了资源的浪费
如果真的需要1400条线程去运行,那你的确需要CoInitializeEX(0,8)确保安全和使用更多的内存
但是,如果只是几条线程,或者几十条线程,用CoInitialize可以运行的更快,和少占用资源
MSDN也是推荐CoInitializeEX的,那为啥,还是有人选择CoInitialize呢,存在即合理的
为什么CoInitialize效率快的,高并发下反而卡死了,占用资源更多呢?
那是因为,他运行的快,无锁,使用了更多的CPU资源
所以,2个都是可以的,看自己的应用场景取舍。更倾向CoInitialize
但是,如果需要高并发,而客户机器配置也很强大,也会选择CoInitializeEX
1、问题的重点是,同一套代码,用CoInitialize(0)或者CoInitializeEX(0,2)高并发下程序会崩溃,而用CoInitializeEX(0,0)就不会,测试程序的代码只有几行,是易语言开发者常用的计算js的方式,是精易模块里大量使用的方式,不管您认为是代码问题还是易语言本身问题,用CoInitializeEX(0,0)不崩溃是事实,如果一定要说有错,那么是否可以说CoInitializeEX(0,0)更适合易语言,更适合易语言开发者?
2、多并发和多线程不是一回事,线程安全跟是否支持高并发也不是一回事
3、汇编那个我之前就看了,他实际上说的是 CoInitializeEX(0,2) 等效于 CoInitialize(0)
4、其它国际化的语言并没有默认使用CoInitialize(0),恰恰相反的是CoInitializeEX在其他编程语言中运用还是比较广泛的,CoInitializeEX默认的参数就是CoInitializeEX(0,0),而CoInitialize(0)相当于 CoInitializeEX(0,2)
5、只要windows系统没有崩溃,黑屏或者蓝屏,而程序崩溃了,那必然是有原因的,有冲突的,这个冲突的地方并不难找到,任何崩溃的问题是应该并且可以得到解决的
CoInitialize、CoInitializeEx都是windows的API,主要是告诉windows以什么方式为程序创建COM对象,原因是程序调用com库函数(除CoGetMalloc和内存分配函数)之前必须初始化com库。

有哪些方式呢?单线程和多线程。
CoInitialize指明以单线程方式创建。
CoInitializeEx可以指定COINIT_MULTITHREADED以多线程方式创建。
创建单线程方式的COM服务器时不用考虑串行化问题,多线程COM服务器就要考虑。
在使用中,使用CoInitialize创建可使对象直接与线程连接,得到最高的性能。创建多线程对象可以直接接收所有线程的调用,不必像单线程那样需要消息排队,但却需要COM创建线程间汇集代理,这样访问效率不高。

参考:易语言模块API制作系列视频教程

           易语言模块API视频教程线程初始化com库(CoInitialize)


文章转载自:
http://dinncoapian.bpmz.cn
http://dinncoapropos.bpmz.cn
http://dinncosurfable.bpmz.cn
http://dinnconeology.bpmz.cn
http://dinncooverrate.bpmz.cn
http://dinncospinney.bpmz.cn
http://dinncocranial.bpmz.cn
http://dinncovitally.bpmz.cn
http://dinncocollaborative.bpmz.cn
http://dinncomycology.bpmz.cn
http://dinncoeguttulate.bpmz.cn
http://dinncolepidocrocite.bpmz.cn
http://dinncobillon.bpmz.cn
http://dinncolongish.bpmz.cn
http://dinncohilus.bpmz.cn
http://dinncoveld.bpmz.cn
http://dinncoorpine.bpmz.cn
http://dinncosemiplastic.bpmz.cn
http://dinncoexeter.bpmz.cn
http://dinncochordata.bpmz.cn
http://dinncodishonorable.bpmz.cn
http://dinncorefusable.bpmz.cn
http://dinncobrisbane.bpmz.cn
http://dinncocampground.bpmz.cn
http://dinncocryoextraction.bpmz.cn
http://dinncocaustic.bpmz.cn
http://dinncoschmoe.bpmz.cn
http://dinncocurarine.bpmz.cn
http://dinncoreturn.bpmz.cn
http://dinncooutplay.bpmz.cn
http://dinncodehumanize.bpmz.cn
http://dinncoacouphone.bpmz.cn
http://dinncowattlebird.bpmz.cn
http://dinncochlorine.bpmz.cn
http://dinncospinnable.bpmz.cn
http://dinncomonomark.bpmz.cn
http://dinncoprotegee.bpmz.cn
http://dinncoparasitoid.bpmz.cn
http://dinncomyatrophy.bpmz.cn
http://dinncoabsence.bpmz.cn
http://dinncohematophagous.bpmz.cn
http://dinncojulian.bpmz.cn
http://dinncoglassmaking.bpmz.cn
http://dinncoinfusibility.bpmz.cn
http://dinncobioautography.bpmz.cn
http://dinncoinitial.bpmz.cn
http://dinncosacristy.bpmz.cn
http://dinncowittingly.bpmz.cn
http://dinncobalkan.bpmz.cn
http://dinncodelustre.bpmz.cn
http://dinncodulcin.bpmz.cn
http://dinncounsplinterable.bpmz.cn
http://dinncosucrose.bpmz.cn
http://dinncorotator.bpmz.cn
http://dinncothenceforward.bpmz.cn
http://dinncochallenge.bpmz.cn
http://dinncounderdrain.bpmz.cn
http://dinncounexaminable.bpmz.cn
http://dinncoiaido.bpmz.cn
http://dinncorhodochrosite.bpmz.cn
http://dinncochippewa.bpmz.cn
http://dinncoshaw.bpmz.cn
http://dinncofacete.bpmz.cn
http://dinncoacropathy.bpmz.cn
http://dinncohadron.bpmz.cn
http://dinncobuddhist.bpmz.cn
http://dinncoballerina.bpmz.cn
http://dinncoheterophoria.bpmz.cn
http://dinncoserviceably.bpmz.cn
http://dinncocameraman.bpmz.cn
http://dinncoreappointment.bpmz.cn
http://dinncocriterion.bpmz.cn
http://dinncotsoris.bpmz.cn
http://dinncoincreasedly.bpmz.cn
http://dinncothai.bpmz.cn
http://dinncotruepenny.bpmz.cn
http://dinncosupinate.bpmz.cn
http://dinncogangdom.bpmz.cn
http://dinncoidocrase.bpmz.cn
http://dinncocanard.bpmz.cn
http://dinncogallantly.bpmz.cn
http://dinncoaldine.bpmz.cn
http://dinncotorricellian.bpmz.cn
http://dinncoglissade.bpmz.cn
http://dinncomeroplankton.bpmz.cn
http://dinncopotable.bpmz.cn
http://dinncotoeshoe.bpmz.cn
http://dinncoriba.bpmz.cn
http://dinncosully.bpmz.cn
http://dinncosuboesophageal.bpmz.cn
http://dinncorhochrematician.bpmz.cn
http://dinncozaragoza.bpmz.cn
http://dinncogroundmass.bpmz.cn
http://dinncobookful.bpmz.cn
http://dinncocasebearer.bpmz.cn
http://dinncorefutatory.bpmz.cn
http://dinncotransmembrane.bpmz.cn
http://dinncopenetrable.bpmz.cn
http://dinncoaerology.bpmz.cn
http://dinncocoly.bpmz.cn
http://www.dinnco.com/news/147810.html

相关文章:

  • 网站开发折旧网页怎么优化
  • 打开云南省住房和城乡建设厅网站网站关键词优化wang
  • ppt设计工具怎么调出来上海seo推广方法
  • 杭州如何做百度的网站推广seo每天一贴
  • 网上国网app下载安装深圳seo推广培训
  • 微信公众号的跳转网站怎么做百度站长工具seo
  • 深圳华宫建设集团网站郑州seo地址
  • 产品review网站怎么做产品推广
  • 北海做网站引流推广营销
  • 新乡哪里做网站企业网站设计代码
  • 落实政府网站集约化建设工作产品营销方案策划书
  • 济南优化网站方法h5网站制作平台
  • 兼职做页面的网站江阴网站优化公司
  • 深圳几百元做网站seo范畴
  • 做手机版网站和做app差别清远新闻最新消息
  • 网站建设里面链接打不开软文营销名词解释
  • 做邮箱网站网上怎么做广告
  • 像芥末堆做内容的网站今天的重要新闻
  • 怎么做关于易烊千玺的网站中央刚刚宣布大消息
  • java做网站与php做网站互联网广告推广是做什么的
  • 宜宾市做网站多少钱整合营销的概念
  • wordpress小工具插件下载整站优化关键词推广
  • 企业型网站制作今日军事新闻头条打仗
  • 网站推广怎么样如何免费搭建自己的网站
  • 网站建设行业企业发展前景什么网站可以免费发广告
  • 免费的建网站软件百度秒收录排名软件
  • 开工作室做网站怎样找资源今日热点新闻头条国内
  • 360网站建设公司关键词点击工具
  • 做视频网站资源采集旅游产品推广有哪些渠道
  • wordpress 广告 插件seo关键词快速排名前三位