正 文

利用API在Windows下创建进程和线程


www.7dspace.com  更新日期:2006-1-24 5:09:04  七度空间


  2、Windows线程的创建及实验:

  2.1 使用CreateThread在Windows下创建线程:

  在Windows中创建线程可以调用两个函数_beginthreadex和CreateThread两个函数,这里只介绍后者。

  CreateThread函数原型:

HANDLE CreateThread
 (LPSECURITY_ATTRIBUTES lpThreadAttributes,//pointer to thread security attributes
  DWORD dwStackSize,//initial thread stack size, in bytes
  LPSECURITY_START_ROUTINE lpStartAddress,//pointer to thread function
  LPVOID lpParameter,//argument for new thread
  DWORD dwCreationFlags,//creation flags
  LPDWORD lpThreadId //pointer to returned thread identifier
)

  其中,在本实验阶段比较重要的参数是第三和第四个:

  a)第三个参数是一个指向函数的指针,所以应传入的参数应为函数的地址,如&Func的形式.而这个传入的参数,则必须被声明成为:

DWORD WINAPI threadFunc(LPVOID threadArgu);

  的形式.这个函数也就是要执行线程任务的那个函数体实体.这里应注意,传入应使用Func而非&Func。

  如:CreateThread(NULL,0,Func,…)

  具体原因:我目前认为是系函数前部使用WINAPI所致。

  b)第四个参数应是执行线程任务的函数体实体所需要的参数,即上面所举例的函数threadFunc的参数threadArgu,这在WINDOWS中被定义成一个LPVOID的类型,目前我认为,可以把它在功能上看成和void* 类似。

  参考:LPVOID的原型:

typedef void far *LPVOID;

  所以,当你有自己需要的类型的参数传入时,可以用

typedef struct
{
int firstArgu,
long secArgu,


}myType,* pMyType;

  将你想要传入的参数装入一个结构体中。

  在传入点,使用类似:

pMyType pMyTpeyArgu;

CreateThread(NULL,0,threadFunc,pMyTypeArgu,…);

  在函数threadFunc内部的接收点,可以使用“强行转换”,如:

int intValue=((pMyType)lpvoid)->firstArgu;
long longValue=((pMyType)lpvoid)->secArgu;
… …

  2.2 线程实验1---创建N个随机线程,所有线程的执行时间均为T秒,观察每个线程的运行状况:

  为了使线程的运行趋于随机化,应先使用:

srand((unsigned int)time (NULL));

  在每个线程的运行中,每个线程的睡眠时间为:

sleepTime=1000+30*(int)eRandom(50+tNo);

Sleep(sleepTime);

  这样,可以使进程的运行趋于随机化.

6页,页码:[1] [2] [3] [4] [5] [6] 

上一篇:Excel中录入固定格式数据的技巧
下一篇:Windows 2000缓冲区溢出技术原理
标题:利用API在Windows下创建进程和线程 作者:EmilMatthew 来源:blog
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐