我喜欢蓝天,也喜欢雨天。
分类: Windows平台
2013-08-27 16:16:15
一个程序中的线程是同一进程的不同部分,因此它们共享进程的资源(内存、打开的文件等),共享静态变量。而每个线程都有自己的堆栈,因此动态变量对每个线程是唯一的。每个线程还有它自己的处理器状态,这个状态在进行线程切换期间被保存和恢复。
创建线程: hThread = CreateThread();
hThread = _beginthread();
_endthread();
sleep
临界区
临界区是一块不可中断的代码。
一个临界区对象:CRITICAL_SECTION类型的全局变量。如:CRITICAL_SECTION cs;。这个临界区对象必须首先被程序中的某个线程初始化,通过调用InitializeCriticalSection (&cs); 创建一个名为cs的临界区对象。
进入临界区:EnterCriticalSection (&cs);此时,线程被认为“拥有”临界区对象。
离开临界区:LeaveCriticalSection (&cs);
删除临界区:DeleteCriticalSection (&cs);
临界区只能用于在同一个进程内的线程之间的协调,要协调两个不同进程对同一资源的共享,用“互斥对象(mutex object)”技术。
事件对象
在程序的整个生存期内保持线程的运行,但是必要时才激活它。
创建事件对象:hEvent = CreateEvent (&sa, fManual, fInitial, pszName); 事件对象被初始化为有信号, 就将fInitial设置为FALSE;
置位一个现存的事件对象:SetEvent(hEvent);
复位一个现存的事件对象:ResetEvent(hEvent);
WaitForSingleObject(hEvent, dwTimeOut);
线程局部存储:
如果需要在一个线程内部的各个函数调用都能访问、但其它线程不能访问的变量(被称为static memory local to a thread 线程局部静态变量),就需要新的机制来实现。这就是TLS。