函数原型(包含在windows.h中)
HANDLE CreateThread(LPSECURITY_ATTRIBUTES lpThreadAttributes,DWORD dwStackSize,LPTHREAD_START_ROUTINE lpStartAddress,LPVOID lpParameter,DWORD dwCreationFlags,LPWORD lpThreadid)
下面具体说明:
lpThreadAttributes : 指向SECURITY_ATTRIBUTES结构体的指针,在NT系统中有效。传递NULL值表示使用默认的安全性。如果希望所有的子进程能继承该线程对象的句柄,就必须要设定一个SECURITY_ATTRIBUTES结构体。
dwStackSize : 设定线程初始栈的大小。以字节为单位。系统会将其四舍五入为最接近的页面大小。如果值为0或小于默认提交大小,则使用和调用该函数的线程相同的栈大小。
lpStartAddress : 表示新线程的起始地址。这要求在程序中定义一个函数作为入口函数。名称任意。但是格式必须为:
DWORD WINAPI 函数名(LPVOID lpParameter)
dwCreationFlags : 设置用于控制线程创建的附加标记,值可以为CREATE_SUSPENDED或0。如果为前者则线程创建后被挂起。直到程序调用了ResumeThread函数。如果为后者,则线程创建后直接运行。
lpThreadid : 在9x架构下,必须指定此值作为线程ID。NT架构下可以指定,也可以传NULL参数表示匿名线程。
HANDLE newThread1;
newThread1 = CreateThread(NULL,0,function,NULL,0,NULL);
CloseHandle(newThread1);
这是代码的实现过程
当主线程实现过快的时候,其他线程很可能未得到执行主函数便已经结束。此时需要调用Sleep函数对主线程进行休眠,以创造其他线程进行的机会。
如Sleep(1),Sleep的参数为DWORD(32位unsigned long)类型,单位为ms。
线程的同步使用:
当多线程需要同时进行时,可能会发生多个线程同时调用一个对象的情况。这个时候可以通过互斥对象来达到线程的同步。
(1)创建互斥对象
HANDLE CreateMutex(LPSECURITY_ATTRIBUTES lpMutexAttributes,BOOL binitialOwner,LPCTSTR lpNarne)
lpMutexAttributes : 指向SECURITY_ATTRIBUTES结构体的指针。传递NULL值表示使用默认的安全性。
binitialOwner : 用于指定互斥对象初始的拥有者,如果该值为true,则创建这个互斥对象的线程对其拥有所有权。
lpName : 指定互斥对象的名称。如果参数为NULL则创建匿名的互斥对象。
调用成功后该函数返回所创建互斥对象的句柄。
(2)释放互斥对象
BOOL ReleaseMutex(HANDLE hMutex)
(3)申请使用互斥对象
DWORD WaitForSingleObject(HANDLE hHandle,DWORD dwMilliseconds)
hHandle : 所请求的对象的句柄。一旦该对象处于有信号状态就返回。如果该对象始终处于无信号状态,即未通知有信号的状态,则函数一直等待从而实现暂停线程的使用。
dwMilliseconds : 指定等待的时间间隔。以ms为单位。过了等待时间若该对象仍无信号,则此函数返回。
特殊地,此参数设置为0,即测试后立即返回,设为INFINITE,则会一直等待信号。
此函数的返回值:
WAIT_OBJECT_0 : 有信号
WAIT_TIMEOUT : 直到超时,此阶段内无信号
WAIT_ABANDONED : 该互斥对象在上一线程调用后未被释放。该对象的所有权交予当前线程并且此互斥对象被设置为无信号。