线程
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);该函数不应该返回,因为如果返回了,那么该线程和该线程创建的所有纤程就会被立即取消。
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函数。
LPVOID lpFiber // pointer to fiber to switch to
);
单个线程上每次只能运行一次纤程。若要使新纤程能够运行,可以调用SwitchToFiber函数。
6.VOID DeleteFiber(
LPVOID lpFiber // pointer to the fiber to delete
);
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.