windows核心编程---线程的创建
在windows核心编程中提交,进程只是作为线程的容器,并为线程的执行提供空间,他本身并不做什么操作。
WINODWS系统提供了如下的API用于创建线程。
1
HANDLE CreateThread(
2
LPSECURITY_ATTRIBUTES lpThreadAttributes, // pointer to security attributes
3
DWORD dwStackSize, // initial thread stack size
4
LPTHREAD_START_ROUTINE lpStartAddress, // pointer to thread function
5
LPVOID lpParameter, // argument for new thread
6
DWORD dwCreationFlags, // creation flags
7
LPDWORD lpThreadId // pointer to receive thread ID
8
);
但是一般开发者并不会用这个API去创建线程,而是用_beginthreadex这个函数,如果用MFC,可以使用AfxBeginThread去创建一个线程。
创建线程的过程如下:
线程内核对象创建完成后,开始分配线程的堆栈内存,该空间从进程的空间中分配得来,所以线程并没有自己独立的内存空间。系统会将pvParam和pfnStartAddrj写入线程的堆栈。
每个线程都有它自己的一组C P U寄存器,即线程的上下文。该上下文反映了线程上次运行时该线程的C P U寄存器的状态。线程的这组C P U寄存器保存在一个C O N T E X T结构(在Wi n N T. h头文件中作了定义)中。C O N T E X T结构本身则包含在线程的内核对象中,当该线程再次被调度时,通过读取上下文,即可以将线程继续执行下去。
上一个简单的例子,怎么去创建一个windows线程。
01
#include <stdio.h>
02
#include <string>
03
#include <windows.h>
04
#include <process.h>
05
#include <iostream>
06
using namespace std;
07
08
09
class ThreadX
10
{
11
private:
12
int loopStart;
13
int loopEnd;
14
int dispFrequency;
15
16
public:
17
string threadName;
18
19
ThreadX( int startValue, int endValue, int frequency )
20
{
21
loopStart = startValue;
22
loopEnd = endValue;
23
dispFrequency = frequency;
24
}
25
26
static unsigned __stdcall ThreadStaticEntryPoint(void * pThis)
27
{
28
ThreadX * pthX = (ThreadX*)pThis;
29
30
printf("loopStart : %d, loopEnd : %d, dispFrequency: %d\n", pthX->loopStart,
31
&nb
相关新闻>>
- 发表评论
-
- 最新评论 更多>>