·一个进程创建之后,同时将创建一个主线程。可以在主线程中创建该进程的其他线程。进程可以被视为线程的容器。一个线程默认的栈大小为64KB,也可以在创建线程的时候自定义栈的大小。同一个进程中,一个线程分配的内存,可以被其他线程所访问。不同进程中的线程如要互相访问,则需通过进程间通信来处理。
·线程有5种状态:运行态,挂起态,休眠态,阻塞态和终止态。
·创建线程:通过CreateThread函数来完成。
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpsa,
DWORD cbStack,
LPTHREAD_START_ROUTINE lpStartAddr,
LPVOID lpvThreadParam,
DWORD fdwCreate,
LPDWORD lpIDThread
);
参数:
lpsa设置为NULL。
cbStack定义堆栈大小,设置为0,则为默认的64KB。也可以设定为其他值,来自定义栈的大小,前提是下面的fdwCreate要设置为STACK_SIZE_PARAM_IS_A_RESERVATION
lpStartAddr指向应用程序定义的LPTHREAD_START_ROUTINE类型的函数的指针,该函数由此创建线程执行,表明新线程起始地址。这个函数就是该线程的入口函数,如同main函数是主线程的入口函数。
LpvThreadParam向该线程传递参数。
fdwCreate设置为CREATE_SUSPENDED创建一个挂起的线程,设置为STACK_SIZE_PARAM_IS_A_RESERVATION,自定义线程的栈大小。设置为0,线程创建之后立即执行。
lpIDThread:返回线程ID。
返回值:
成功返回线程句柄,失败返回NULL。
如:
HANDLE hThread;
hThread = CreateThread(NULL,0,ThreadProc,NULL,0,NULL);
·ThreadProc函数的声明要加上WINAPI,否则编译的时候好像会出错。
如:
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
MessageBox(NULL,_T("hello"),_T("joyzml"),MB_OK);
return 0;
}
·GetCurrentThread函数
在一个线程内,可以通过调用GetCurrentThread函数来获取该线程的句柄。
·GetCurrentThreadId函数
在一个线程内,可以通过调用GetCurrentThreadId函数来获取该线程的ID。
·ResumeThread函数
调用该函数可以将一个挂起的线程恢复运行。
·ExitThread函数
调用该函数结束一个线程,主线程中调用该函数,将结束整个应用程序。
·线程优先级
Windows CE 5.0支持256个优先级,0-255,0最高。每个线程都有自己的优先级。创建线程默认的优先级为251。
·CeSetThreadPriority和CeGetThreadPriority函数
前者用来设置线程优先级,后者用来获取线程优先级
BOOL CeSetThreadPriority(
HANDLE hThread,
int nPriority
);
int CeGetThreadPriority(
HANDLE hThread
);
·优先级规划设计
1-96:高实时性应用程序线程
97-152:驱动程序线程
153-247:低实时性应用程序线程
248-255:非实时应用程序线程
·线程量
线程量是分配给线程运行一次占用的时间片,默认的线程量通常为100ms。可以通过修改OAL中的代码来修改默认的线程量。
BOOL CeSetThreadQuantum(
HANDLE hThread,
DWORD dwTime
);
如上函数可以用来设置本线程的线程量。