易截截图软件、单文件、免安装、纯绿色、仅160KB

C运行时库(解析mainCRTStartup)

1.概论
  运行时库是程序在运行时所需要的库文件,通常运行时库是以LIB或DLL形式提供的。C运行时库诞生于20世纪70年代,当时的程序世界还很单纯,应用程序都是单线程的,多任务或多线程机制在此时还属于新观念。所以这个j时期的C运行时库都是单线程的。
  随着操作系统多线程技术的发展,最初的C运行时库无法满足程序的需求,出现了严重的问题。C运行时库使用了多个全局变量(例如errno)和静态变量,这可能在多线程程序中引起冲突。假设两个线程都同时设置errno,其结果是后设置的errno会将先前的覆盖,用户得不到正确的错误信息。
  因此,Visual C++提供了两种版本的C运行时库。一个版本供单线程应用程序调用,另一个版本供多线程应用程序调用。多线程运行时库与单线程运行时库有两个重大差别:
  (1)类似errno的全局变量,每个线程单独设置一个;
  这样从每个线程中可以获取正确的错误信息。
  (2)多线程库中的数据结构以同步机制加以保护。
  这样可以避免访问时候的冲突。
  Visual C++提供的多线程运行时库又分为静态链接库和动态链接库两类,而每一类运行时库又可再分为debug版和release版,因此Visual C++共提供了6个运行时库。如下表:
C运行时库 库文件
Single thread(static link)  libc.lib
Debug single thread(static link)  libcd.lib
MultiThread(static link)  libcmt.lib
Debug multiThread(static link) libcmtd.lib
MultiThread(dynamic link) msvert.lib
Debug multiThread(dynamic link) msvertd.lib 
void mainCRTStartup(void)
{
 int mainret;
 /*获得WIN32完整的版本信息*/
 _osver = GetVersion();
 _winminor = (_osver >> 8) & 0x00FF ;
 _winmajor = _osver & 0x00FF ;
 _winver = (_winmajor << 8) + _winminor;
 _osver = (_osver >> 16) & 0x00FFFF ;
 _ioinit(); /* initialize lowio */
 /* 获得命令行信息 */
 _acmdln = (char *) GetCommandLineA();
 /* 获得环境信息 */
 _aenvptr = (char *) __crtGetEnvironmentStringsA();
 _setargv(); /* 设置命令行参数 */
 _setenvp(); /* 设置环境参数 */
 _cinit(); /* C数据初始化:全局变量初始化,就在这里!*/
 __initenv = _environ;
 mainret = main( __argc, __argv, _environ ); /*调用main函数*/
 exit( mainret );


相关文档:

C测试小程序

C测试小程序
1、                 字符串类
1.1        strstr
功能:查找和获取子串
void test_strstr()
{
        char *str="Borland   Inte ......

C/C++ 之旅

没想到 没想到 万万没想到
对C++八窍只通了7窍的我,竟然要开始搞c++了的说,真是好不刺激。
不敢相信,不敢相信。
类型是什么玩意?类怎么写?字符串怎么处理?怎么释放内存?
偶不知,不知,真的不知。。。。
哎       完都完了。
唉 不管怎么说都要去学的。。。一点辙都没有
#incl ......

c标签与choose标签在select标签中的用法

<select class="wellId" id="gasOriginWellId" name="gasOriginWellId" value="${mechWellForm.gasOriginWellId}" index="true">
                             < ......

LINUX C 定时器

【实现功能】:Linux下的C编程:编写一个程序(库),实现定时器(计时器)的功能,它能为用户提供在同一进程中多次使用的定时器。这里要求用信号来实现。
【解题思路】:编写一个结构体Timer代表一个计时器,然后再定义Timer类型的数组myTimer[N],用来保存我们设置的定时器;再定义函数setTimer()生成计时器,并将生成 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号