欢迎来到天天文库
浏览记录
ID:44400063
大小:242.50 KB
页数:13页
时间:2019-10-21
《多线程编程实践》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、多线程编程实践闻炳海WindowsAPI线程函数MFC线程函数提纲多线程起源并发执行:多个进程或线程先后开始执行,都还没有停止。目的:多任务同时执行好处:提高运行速度提高硬件利用率改善用户体验技术:进程线程超线程在CPU多核化,多线程编程更加重要多线程起源进程:程序在一个数据集合上的一次执行过程。线程:是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己不拥有系统资源,它与同属一个进程的其它线程共享进程所拥有的全部资源。两个进程互相独立,连个线程共享数据空间。CPU调度进程开销很大,而调度线程开销小的多。线程间的通讯手段也更多更简便。创建线程WindowsAPI:CreateThre
2、ad()hThread=CreateThread(&security_attributes,dwStackSize,ThreadProc,pParam,dwFlags,&idThread);参数说明:lpThreadAttributes:指向安全属性结构,设为NULL,用缺省值。dwStackSize,线程堆栈大小,一般取0,缺省设置。lpStartAddress,指向线程函数的指针,必须以下列形式声明:DWORDWINAPIThreadProc(PVOIDpParam)lpParameter:向线程函数传递的参数。dwCreationFlags:线程标志,创建挂起线程或立即激活。lpThre
3、adId:保存新线程的id。hThread:函数成功,返回线程句柄;函数失败返回false。简单的线程例子#includeintmain(){srand((unsigned)time(0));for(inti=0;i<2;++i){if(NULL==CreateThread(0,0,MyThread,(void*)i,0,0)){return-1;;}}while(!kbhit()){cout<4、hread(LPVOIDParam){intId=int(Param);cout<<"Iamthethread:"<5、Y_NORMAL,THREAD_PRIORITY_ABOVE_NORMAL,THREAD_PRIORITY_HIGHEST,挂起线程:系统将不再分配CPU去执行线程。DWORDResumeThread(HANDLEhThread);恢复线程:重新投入执行DWORDSuspendThread(HANDLEhThread);终止线程:(三种方式)VOIDExitThread(UINTfuExitCode);BOOLTerminateThread(HANDLEhThread,DWORDExitCode);WindowsAPIsWindowsAPI线程函数MFC线程函数提纲MFC中的线程MFC创建线6、程:CWinThread*AfxBeginThread(ThreadProc,LPVOIDpParam);线程函数:UINTMyThreadFunction(LPVOIDpParam);MFC结束线程:voidAFXAPIAfxEndThread(UINTExitCode,BOOLbDelete=TRUE);临界区:CCriticalSection保证一次只能有一个线程访问一个数据对象,只能用于线程间同步互斥量:CMutex多个应用(多个进程)同时存取相应资源,可以在进程间使用信号量:CSemaphore同时可以有多个线程使用一组相应资源,资源计数事件:CEvent必须等待某些事件发生后才能存7、取相应资源头文件:#icludeMFC线程同步单锁:CSingleLock:锁定一个资源多锁:CMultiLock:同时锁定多个资源CMutexmutex;CSingleLocksingleLock(&mutex);CEventEvent,Event2;CSyncObject*Es[2];Es[0]=&Event1;Es[1]=&Event2;CMultiLockWaitMult
4、hread(LPVOIDParam){intId=int(Param);cout<<"Iamthethread:"<5、Y_NORMAL,THREAD_PRIORITY_ABOVE_NORMAL,THREAD_PRIORITY_HIGHEST,挂起线程:系统将不再分配CPU去执行线程。DWORDResumeThread(HANDLEhThread);恢复线程:重新投入执行DWORDSuspendThread(HANDLEhThread);终止线程:(三种方式)VOIDExitThread(UINTfuExitCode);BOOLTerminateThread(HANDLEhThread,DWORDExitCode);WindowsAPIsWindowsAPI线程函数MFC线程函数提纲MFC中的线程MFC创建线6、程:CWinThread*AfxBeginThread(ThreadProc,LPVOIDpParam);线程函数:UINTMyThreadFunction(LPVOIDpParam);MFC结束线程:voidAFXAPIAfxEndThread(UINTExitCode,BOOLbDelete=TRUE);临界区:CCriticalSection保证一次只能有一个线程访问一个数据对象,只能用于线程间同步互斥量:CMutex多个应用(多个进程)同时存取相应资源,可以在进程间使用信号量:CSemaphore同时可以有多个线程使用一组相应资源,资源计数事件:CEvent必须等待某些事件发生后才能存7、取相应资源头文件:#icludeMFC线程同步单锁:CSingleLock:锁定一个资源多锁:CMultiLock:同时锁定多个资源CMutexmutex;CSingleLocksingleLock(&mutex);CEventEvent,Event2;CSyncObject*Es[2];Es[0]=&Event1;Es[1]=&Event2;CMultiLockWaitMult
5、Y_NORMAL,THREAD_PRIORITY_ABOVE_NORMAL,THREAD_PRIORITY_HIGHEST,挂起线程:系统将不再分配CPU去执行线程。DWORDResumeThread(HANDLEhThread);恢复线程:重新投入执行DWORDSuspendThread(HANDLEhThread);终止线程:(三种方式)VOIDExitThread(UINTfuExitCode);BOOLTerminateThread(HANDLEhThread,DWORDExitCode);WindowsAPIsWindowsAPI线程函数MFC线程函数提纲MFC中的线程MFC创建线
6、程:CWinThread*AfxBeginThread(ThreadProc,LPVOIDpParam);线程函数:UINTMyThreadFunction(LPVOIDpParam);MFC结束线程:voidAFXAPIAfxEndThread(UINTExitCode,BOOLbDelete=TRUE);临界区:CCriticalSection保证一次只能有一个线程访问一个数据对象,只能用于线程间同步互斥量:CMutex多个应用(多个进程)同时存取相应资源,可以在进程间使用信号量:CSemaphore同时可以有多个线程使用一组相应资源,资源计数事件:CEvent必须等待某些事件发生后才能存
7、取相应资源头文件:#icludeMFC线程同步单锁:CSingleLock:锁定一个资源多锁:CMultiLock:同时锁定多个资源CMutexmutex;CSingleLocksingleLock(&mutex);CEventEvent,Event2;CSyncObject*Es[2];Es[0]=&Event1;Es[1]=&Event2;CMultiLockWaitMult
此文档下载收益归作者所有