- 组成:线程内核对象+线程栈
- 多线程应用程序:
- 通常情况下,一个应用程序拥有一个用户界面线程,用于创建所有窗口,并且有一个GetMessage循环。
- 进程中的所有其他线程都是工作线程,它们与计算机或 I/O相关联,但是这些线程从不创建窗口。
- 一个用户界面线程通常拥有比工作线程更高的优先级,因此用户界面负责向用户作出响应。
- 线程函数:
- 主线程的进入点函数的名字必须是main、wmain、WinMain或wWinMain。
- 与这些函数不同的是,线程函数可以使用任何名字。
- 由于给你的主线程的进入点函数传递了字符串参数,因此可以使用ANSI/Unicode版本的进入点函数:main/wmain和WinMain/wWinMain。
- 可以给线程函数传递单个参数,参数的含义由你而不是由操作系统来定义。因此,不必担心ANSI/Unicode问题。
- CreateThread函数:
1 typedef DWORD (WINAPI *LPTHREAD_START_ROUTINE)(LPVOID pvarg); 2 3 HANDLE CreateThread( 4 LPSECURITY_ATTRIBUTES lpsa, 5 DWORD cbStack, //线程栈大小,WinCE默认64K 6 LPTHREAD_START_ROUTINE lpStartAddr, //入口点函数 7 LPVOID lpvThreadParam, 8 DWORD fdwCreate, 9 LPDWORD lpIDThread 10 );
- 终止线程:
- 线程函数返回(最好使用这种方法)。
- 通过调用ExitThread函数,线程将自行撤消(最好不要使用这种方法)。
- 同一个进程或另一个进程中的线程调用TerminateThread函数(应该避免使用这种方法)。
- 包含线程的进程终止运行(应该避免使用这种方法)。