Windows线程是可以执行的代码的实例。系统是以线程为单位调度程序。一个程序当中可以有多个线程,实现多任务的处理。
windows线程的特点:
1.线程都具有一个ID
2.每个线程都具有自己的内存栈;
3.同一进程中的线程使用同一个地址空间。
线程的调度:
操作系统将CPU的执行的时间划分成时间片,依次根据时间片执行不同的线程。
线程轮询:线程A->线程B->线程A->线程B->…
创建线程
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,//安全属性,总是置零,因为已废弃
SIZE_T dwStackSize,//线程栈的大小(是以1M为单位对齐)
LPTHREAD_START_ROUTINE lpStartAddress,//线程处理函数的函数地址(程序员自己定义,由操作系统进行调用)
LPVOID lpParameter, //传递给线程处理函数的参数
DWORD dwCreationFlags,//线程的创建方式(1线程立即执行、2线程挂起<先休眠,再唤醒>)CREATE_SUSPENDED 线程挂起
LPDWORD lpThreadId //创建成功,返回线程的ID
); //创建成功,返回线程句柄
定义线程处理函数
DWORD WINAPI TreadProc(
LPVOID lpParameter //创建线程时,传递给线程的参数
);
实例如下:
#include <Windows.h>
#include <stdio.h>
DWORD CALLBACK myThreadProc(LPVOID lpParam)
{
char* szText = (char*)lpParam;
while(1)
{
Sleep(2000);
printf("%s\n",szText);
}
}
int main()
{
char* szText = "***XXX***TTT";
DWORD myThreadId = 0;
HANDLE hThread = CreateThread(NULL,0,myThreadProc,szText,0,&myThreadId);
system("pause");
return 0;
}
线程挂起
DWORD SuspendThread(
HANDLE hThread //要挂起的线程
);
唤醒线程
DWORD ResumeThread(
HANDLE hThread //要唤醒的线程
)