外贸网站翻墙做广告,wordpress站点设置使用时间,咸阳做网站排名,推广的方式有哪些今天#xff0c;在C的基础上来进行提升#xff0c;学习VC多线程编程。 线程#xff1a;是为了提高系统内程序的并发执行程度而提出来的概念#xff0c;他是比进程更小的能独立运行的基本单位。
线程的组成#xff1a; 线程的内核对象#xff1a;操作系统用它来对线程实施…今天在C的基础上来进行提升学习VC多线程编程。 线程是为了提高系统内程序的并发执行程度而提出来的概念他是比进程更小的能独立运行的基本单位。
线程的组成 线程的内核对象操作系统用它来对线程实施管理内核对象也是系统用来存放线程统计信息的地方。 线程栈它用于维护线程在执行代码时所需要的所有函数参数和局部变量。 创建线程的方法与区别C/C/MFC 1.CreateThread()----WIN32API函数 2._beginthreadx()----MS对C Runtime库的扩展SDK函数 3.AfxBeginThread()----MFC中创建线程的函数。 CreateThread:函数原型如下 lpThreadAttributes:指向SECURITY_ATTRIBUTES结构体指针传递为NULL让线程使用默认安全性 dwStackSize:设置线程初始化栈大小为0则默认使用与调用该函数的线程相同的栈空间大小 lpStartAddress:线程回调函数 lpParameter:参数 dwCreationnFlags:设置用于控制线程创建的附加标记值若为0线程创建之后立即运行 lpThreadId:线程ID。 #include stdafx.h
#include iostream.h
#include windows.h
DWORD WINAPI Func(LPVOID lpParameter)
{cout子线程在运行...endl;return 0;
}
int main(int argc, char* argv[])
{HANDLE h1;//创建线程句柄h1 CreateThread(NULL,0,Func,NULL,0,NULL);//创建线程cout主线程在运行...endl;Sleep(100);CloseHandle(h1);//关闭线程句柄return 0;
} AfxBeginThread():函数原型如下 CWinThread* AfxBeginThread(AFX_THREADPROC pfnThreadProc,LPVOID pParan,int nPriorityTHREAD_PRIORITY_NORMAL,UINT nStackSize0,DWORD dwCreateFlag0,LPSECURITY_ATTRIBUTES lpSecurityAttrsNULL
); 线程终止运行最好的方式是让线程函数自动返回。 有关线程的函数 暂停DWORD SuspendThread(HANDLE hThread); 恢复DWORD ResumeThread(HANDLE hThread); 睡眠VOID Sleep(DWORD dwMilliseconds); Sleep函数可使线程资源放弃它的剩余时间片Sleep(n)系统将会在n毫秒内线程不可调度Sleep(0)告诉系统调用线程释放剩余时间片。并迫使系统重新调度线程。 切换BOOL SwicthToThread(VOID);与Sleep(0)相似不同之处在于允许优先级较低的线程运行。 线程同步当有多个线程访问共享资源而不使资源被破坏时或当一个线程需要将某个任务已经完成的情况通知另外一个线程时需要使用线程同步机制。
线程同步的方法 临界区同步临界区是指包含共享资源的一段代码块 内核同步信号量、互斥量、事件。 以下代码列出了临界区同步与互斥量同步。 #include stdafx.h
#include windows.h
#include iostream.h
DWORD WINAPI Func1(LPVOID lpPraam);
DWORD WINAPI Func2(LPVOID lpParam);
//定义全局变量
int count1000;
//定义临界区
CRITICAL_SECTION cs;
//定义互斥对象句柄
HANDLE hMutex;
int main(int argc, char* argv[])
{//初始化临界区------1InitializeCriticalSection(cs);//创建互斥对象------2hMutex CreateMutex(NULL,FALSE,NULL);//创建两个线程HANDLE h1 CreateThread(NULL,0,Func1,NULL,0,NULL);HANDLE h2 CreateThread(NULL,0,Func2,NULL,0,NULL);//等待线程结束WaitForSingleObject(h1,INFINITE);WaitForSingleObject(h2,INFINITE);//释放临界区DeleteCriticalSection(cs);//关闭互斥量句柄CloseHandle(hMutex);//关闭线程句柄CloseHandle(h1);CloseHandle(h2);return 0;
}
//线程1回调函数
DWORD WINAPI Func1(LPVOID lpPraam)
{while (TRUE){if(count0){//进入临界区//EnterCriticalSection(cs);WaitForSingleObject(hMutex,INFINITE);cout线程1count--endl;//离开临界区//LeaveCriticalSection(cs);ReleaseMutex(hMutex);}else{break;}}return 0;
}
//线程2回调函数
DWORD WINAPI Func2(LPVOID lpPraam)
{while (TRUE){if(count0){//EnterCriticalSection(cs);WaitForSingleObject(hMutex,INFINITE);cout线程2count--endl;//LeaveCriticalSection(cs);ReleaseMutex(hMutex);}else{break;}}return 0;
} 死锁
是指两个或两个以上的进程在执行过程中因争夺资源而造成的一种互相等待的现象若无外力作用它们都将无法推进下去。