Windows核心编程 (3)

线程

1.UNIX服务器应用程序属于单线程应用程序(由Windows定义),但是它能够为多个客户程序提供服务。换句话说,UNIX应用程序的开 发人员已经创建了他们自己的线程结构库,他们能够使用这种线程结构库来仿真纯线程。该线程包能够创建多个堆栈,保存某些CPU寄存器,并且在它们之间进行 切换,以便为客户机请求提供服务。当你将UNIX代码移植到Windows中时,一些问题就会因此而产生。尤其是Windows管理线程的内存栈的方法要 比简单地分配内存复杂得多。Windows内存栈开始时的物理存储器的容量比较小,然后根据需要逐步扩大。为了能够更快和更正确地将它们的代码移植到 Windows中,Microsoft公司在操作系统中添加了纤程。要记住,如果有设计得更好的使用Windows自身线程的应用程序,那么应该避免使用 纤程。
2.实现线程的是windows内核,并且按照microsoft定义的算法对线程进行调度。纤程是以用户方式代码来实现的,内核并不知道纤程,并且它们是根据用户定义的算法来调度的。就内核而言,纤程采用非抢占式调度方式。
3.LPVOID ConvertThreadToFiber(LPVOID lpParameter);如果你的纤程(线程)返回或调用ExitThread函数,那么纤程和线程都会终止运行。
4.LPVOID CreateFiber(
  DWORD dwStackSize,  // initial thread stack size, in bytes
  LPFIBER_START_ROUTINE lpStartAddress,
                      // pointer to fiber function
  LPVOID lpParameter  // argument for new fiber
);
回调函数原型:VOID WINAPI FiberFunc(PVOID pvParam);该函数不应该返回,因为如果返回了,那么该线程和该线程创建的所有纤程就会被立即取消。
5.VOID SwitchToFiber(
  LPVOID lpFiber  // pointer to fiber to switch to
);
单个线程上每次只能运行一次纤程。若要使新纤程能够运行,可以调用SwitchToFiber函数。
6.VOID DeleteFiber(
  LPVOID lpFiber   // pointer to the fiber to delete
);
7.PVOID GetCurrentFiber();
8.PVOID GetFiberData();取得传递给纤程的参数。

9.The GetQueueStatus function returns flags that indicate the type of messages found in the calling thread's message queue.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值