c# 用Windows API CreateThread函数如何创建的线程

 我来答
解忧书屋100
2013-02-27
知道答主
回答量:8
采纳率:0%
帮助的人:8.2万
展开全部
CreateThread
  微软在Windows API中提供了建立新的线程的函数CreateThread,
  概述:
  当使用CreateProcess调用时,系统将创建一个进程和一个主线程。CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤:
  1在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回
  2把线程退出码置为STILL_ACTIVE,把线程挂起计数置1
  3分配context结构
  4分配两页的物理存储以准备栈,保护页设置为PAGE_READWRITE,第2页设为PAGE_GUARD
  5lpStartAddr和lpvThread值被放在栈顶,使它们成为传送给StartOfThread的参数
  6把context结构的栈指针指向栈顶(第5步)指令指针指向startOfThread函数
  MSDN中CreateThread原型:
  HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  DWORD dwStackSize,
  LPTHREAD_START_ROUTINE lpStartAddress,
  LPVOID lpParameter,
  DWORD dwCreationFlags,
  LPDWORD lpThreadId);
  参数说明:
  lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,它被设为NULL,表示使用缺省值。
  dwStackSize,线程堆栈大小,一般=0,在任何情况下,Windows根据需要动态延长堆栈的大小。
  lpStartAddress,指向线程函数的指针,形式:@函数名,函数名称没有限制,但是必须以下列形式声明:
  DWORD WINAPI ThreadProc (PVOID pParam) ,格式不正确将无法调用成功。
  lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为Nil。
  dwCreationFlags :线程标志,可取值如下
  CREATE_SUSPENDED: 创建一个挂起的线程
  0 :创建后立即激活。
  lpThreadId:保存新线程的id。
  返回值:
  函数成功,返回线程句柄;函数失败返回false。
  函数说明:
  创建一个线程。
  语法:
  hThread = CreateThread (&security_attributes, dwStackSize, ThreadProc,pParam, dwFlags, &idThread) ;
  一般并不推荐使用 CreateTheard函数,而推荐使用RTL 库里的System单元中定义的 BeginTheard函数,因为这除了能创建一个线程和一个入口函数以外,还增加了几项保护措施。

参考资料: 百度百科

何度千寻
2015-10-28 · TA获得超过5899个赞
知道大有可为答主
回答量:1381
采纳率:91%
帮助的人:557万
展开全部

  微软在Windows API中提供了建立新的线程的函数CreateThread。


  概述:
  当使用CreateProcess调用时,系统将创建一个进程和一个主线程。CreateThread将在主线程的基础上创建一个新线程,大致做如下步骤:

  1. 在内核对象中分配一个线程标识/句柄,可供管理,由CreateThread返回

  2. 把线程退出码置为STILL_ACTIVE,把线程挂起计数置1

  3. 分配context结构

  4. 分配两页的物理存储以准备栈,保护页设置为PAGE_READWRITE,第2页设为PAGE_GUARD

  5. lpStartAddr和lpvThread值被放在栈顶,使它们成为传送给StartOfThread的参数

  6. 把context结构的栈指针指向栈顶(第5步)指令指针指向startOfThread函数

  MSDN中CreateThread原型:
  HANDLE CreateThread(
  LPSECURITY_ATTRIBUTES lpThreadAttributes,
  DWORD dwStackSize,
  LPTHREAD_START_ROUTINE lpStartAddress,
  LPVOID lpParameter,
  DWORD dwCreationFlags,
  LPDWORD lpThreadId); 


  参数说明:

  1. lpThreadAttributes:指向SECURITY_ATTRIBUTES型态的结构的指针。在Windows 98中忽略该参数。在Windows NT中,它被设为NULL,表示使用缺省值。

  2. dwStackSize:线程堆栈大小,一般=0,在任何情况下,Windows根据需要动态延长堆栈的大小。

  3. lpStartAddress,指向线程函数的指针,形式:@函数名,函数名称没有限制,但是必须以下列形式声明:DWORD WINAPI ThreadProc (PVOID pParam) ,格式不正确将无法调用成功。 

  4. lpParameter:向线程函数传递的参数,是一个指向结构的指针,不需传递参数时,为Nil。 

  5. dwCreationFlags :线程标志,可取值如下 

  6. CREATE_SUSPENDED: 创建一个挂起的线程 

  7. 0 :创建后立即激活。 

  8. lpThreadId:保存新线程的id。


    返回值:

    函数成功,返回线程句柄;函数失败返回false。

    函数说明:

    创建一个线程。

    语法:

  hThread = CreateThread (&security_attributes, dwStackSize, ThreadProc,pParam, dwFlags, &idThread) ;


  一般并不推荐使用 CreateTheard函数,而推荐使用RTL 库里的System单元中定义的 BeginTheard函数,因为这除了能创建一个线程和一个入口函数以外,还增加了几项保护措施。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
亚马逊选品管家
2013-02-27 · TA获得超过643个赞
知道小有建树答主
回答量:805
采纳率:100%
帮助的人:283万
展开全部
C#里面的Thread类不是非常好用吗,还用这个干吗。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式