CreateThread HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, DWORD dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId );lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针,这个参数通常设置为NULL 。用于内核对象跨进程。
注意:如果你不需要线程ID,lpThreadId参数可以被设为NULL,但这只在WindowsNT中才行得通,Windows95中就不行。如果你要写一个程序可以在Windows 95中运行,不要把lpThreadId参数设为NULL。
线程可以通过以下3种方法来终止运行
1.线程函数返回(这是强烈推荐的)。
1)线程函数中创建的所有C++对象都通过其析构函数被正确销毁。
2)操作系统正确释放线程栈使用的内存。
3)操作系统把线程的退出代码(在线程的内核对象中维护)设为线程函数的返回值
4)系统递减少线程的内核对象的使用计数。
调用CloseHandle函数关闭句柄。
2.线程通过调用ExitThread函数“杀死”自己(要避免使用这种方法)
该函数将终止线程的运行(”杀死“主调线程),并导致操作系统清理该线程使用的所有操作系统资源。但是,你的C/C++资源(如C++类对象)不会被销毁。有鉴于些,更好的做法是直接从线程函数返回,不要自己调用ExitThread函数。
3.同一个进程或另一个进程中的线程调用TerminateThread函数(要避免使用这种方法)
不同于ExitThread总是”杀死“主调线程,TerminateThread能”杀死“任何线程。TerminateThread函数是异步的,所以函数返回时,并不保证线程已经终止了。同样,C/C++资源(如C++类对象)不会被销毁。
ResumeThread函数 DWORD ResumeThread( HANDLE hThread );
hThread :指定的要重新运行的线程的句柄
如果ResumeThread函数成功,它将返回线程的前一个挂起计数,否则,它将返回0xFFFFFFFF。一个线程可以被多次挂起。如果一个线程被挂起三次,那么必需调用ResumeThread三次,才能使起线程运行。
SuspendThread函数 DWORD SuspendThread( HANDLE hThread );hThread :指定的要挂起的线程的句柄
void Sleep( DWORD dwMilliseconds );dwMilliseconds:毫秒时间