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

Windows Via C/C++: CreateThread函数

CreateThread函数
前面讲过,进程的主线程会在CreateProcess调用时自动创建。假如你要手工创建线程,你可以调用CreateThread函数:
HANDLE CreateThread(
PSECURITY_ATTRIBUTES psa,
DWORD cbStackSize,
PTHREAD_START_ROUTINE pfnStartAddr,
PVOID pvParam,
DWORD dwCreateFlags,
PDWORD pdwThreadID);
系统在调用CreateThread时创建一个线程内核对象,线程内核对象并非线程本身,它是操作系统用来管理线程的数据结构,其中包含线程的统计信息。这与进程和进程内核对象的关系是类似的。
系统从进程的地址空间中为线程栈分配空间。新的线程和创建它的线程运行在同样的进程上下文中,因此新线程可以访问进程的句柄表、地址空间以及其它处在同一进程上下文中的所有线程的堆栈,这使得同一进程内的多个线程相互通信变得极为简单。
注意 CreateThread函数是用来创建线程的Windows API函数。假如你使用C/C++代码创建新线程,你应该避免使用CreateThread,而用微软C++运行时库函数_beginthreadex代替。本章稍后会讲到_beginthreadex函数并解释用它代替CreateThread的原因。
下面我们来看看CreateThread的参数。
psa
psa是SECURITY_ATTRIBUTES结构的指针,向其传递NULL表示创建的线程内核对象使用默认的安全属性。如果想让新线程内核对象的句柄能被子进程继承,你应该为其传递一个SECURITY_ATTRIBUTES结构的指针,并将bInheritHandle域设置为TRUE,第3章对此有详细的说明。
cbStackSize
[关于cbStackSize的解释参考了MSDN,与原文有出入,参阅http://msdn.microsoft.com/en-us/library/ms686774%28VS.85%29.aspx
]
每个线程的堆栈由预留(reverse)空间和系统最初为其提交(commiteted)的页面空间组成。预留空间的大小表示系统在进程的虚拟地址空间中为线程栈分配的总大小,因此预留空间的大小受进程地址空间大小的制约。初始提交的页面空间使用时才会载入内存,如果线程运行时所需的空间超过初始提交的页面空间大小,系统会从线程保留空间中为其继续提交页面文件,直到线程的预留空间仅剩下一页大小,这一页作为“哨兵”用来防止线程栈的溢出,不能在程序中使用。
当线程函数退出或调用ExitProcess时,相应的线程栈会被销毁,如果线程是由其它线程终止的,其线程栈会一直存在直至进程终止。
线程预留空间和初始提交页面的大小是在可执行文件的头部定义的。默认的预留空间大小是1MB,初始提交页面大小为8K。手动


相关文档:

Linux: S3C2410的RTC驱动

----------------------------------------------------------------------------------------------------------------------------------------
/**/
/*
********************************************************************************************************
*  @Description:s3c2410的rtc驱动的实 ......

Linux设备驱动之I2C架构分析

一:前言
I2c是philips提出的外设总线.I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL.正因为这样,它方便了工程人员
的布线.另外,I2C是一种多主机控制总线.它和USB总线不同,USB是基于master-slave机制,任何设备的通信必须由主机发起才可以.而
I2C 是基于multi master机制.一同总线上可允许多个master.关于I2C协议的知 ......

VB/C++/C#串口通讯源代码【附详细注释】


VB
    If MSComm1.PortOpen = True Then MSComm1.PortOpen = False
    MSComm1.CommPort = i1
    MSComm1.PortOpen = True
    MSComm1.InputMode = comInputModeBinary
    MSComm1.InBufferCount = 0
& ......

C/C++中使用正则表达式

头文件regex.h中定义了c/c++使用正则表达式的函数: regcomp(), regexec(), regerror(), and regfree() 。regcomp()编译正则表达式,regexec()匹配正则表达式, regfree()释放正则表达式,regerror()报告正则表达式错误信息。使用方法如下代码所示:
static string merge_path(const string bas ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号