ImageVerifierCode 换一换
格式:PDF , 页数:80 ,大小:688.31KB ,
资源ID:6300193      下载积分:10 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.docduoduo.com/d-6300193.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(深入浅出Win32多线程程序设计.pdf)为本站会员(HR专家)主动上传,道客多多仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知道客多多(发送邮件至docduoduo@163.com或直接QQ联系客服),我们立即给予删除!

深入浅出Win32多线程程序设计.pdf

1、 0 Win32L !9 Q 2005-12-14 09:48T )? 7?3 I Z VLL T“d?ZBA t M DOS“d T“dK9 ?YV = =iZ T LC “ “ 7 Win32 T“d VBHP BHIBHub L# aYZ T C T“d1oB Y Win32L !9 T“d e9d bV V 3 T“d5 T“d VxWorks ? S 7?v1B H Win32L /b yN Win32L Win32 hProcess s c HANDLE M hModule | NULL lpstrFileName LPTSTR sf . ib 3 F nsizelpstrFile

2、Name F f R TRBv 0 DWORD H| hProcess ib lpstrFileName _ F FT 5R 0b YV/ VR “d V / | -9 EnumProcesses(process_ids, sizeof(process_ids), /R for (int i = 0; i f BOOL CloseHandle(HANDLE hObject); Tf 5R TRUE 5R FALSE VYV GetLastErrorf B Vpyb C H o VC+6.0 LIZEB P C H o# WIN32 APIf 6BZE P MFCMFC L 7? class E

3、xampleTask public: void taskmain(LPVOID param); void StartTask(); ; void ExampleTask:taskmain(LPVOID param) void ExampleTask:StartTask() _beginthread(taskmain,0,NULL); int main(int argc, char* argv) ExampleTask realTimeTask; realTimeTask.StartTask(); return 0; Ir HC /p error C2664: _beginthread : ca

4、nnot convert parameter 1 from void (void *) to void (_cdecl *)(void *) None of the functions with this name in scope match the target type A/ #include “windows.h“ #include class ExampleTask public: void taskmain(LPVOID param); ; void ExampleTask:taskmain(LPVOID param) int main(int argc, char* argv)

5、ExampleTask realTimeTask; _beginthread(ExampleTask:taskmain,0,NULL); return 0; Ir Hp error C2664: _beginthread : cannot convert parameter 1 from void (void *) to void (_cdecl *)(void *) None of the functions with this name in scope match the target type TB1 f TLf Y / %Z 1|f 2 static this | =M #inclu

6、de “windows.h“ #include class ExampleTask public: void static taskmain(LPVOID param); void StartTask(); ; void ExampleTask:taskmain(LPVOID param) void ExampleTask:StartTask() _beginthread(taskmain,0,NULL); int main(int argc, char* argv) ExampleTask realTimeTask; realTimeTask.StartTask(); return 0; #

7、include “windows.h“ #include class ExampleTask public: void static taskmain(LPVOID param); ; void ExampleTask:taskmain(LPVOID param) int main(int argc, char* argv) _beginthread(ExampleTask:taskmain,0,NULL); return 0; (IrYVb |f 2 V %TLf 5 5 * staticf ? staticb %N5Bo V f Lf H| thisT . iLf class Exampl

8、eTask public: friend void taskmain(LPVOID param); void StartTask(); ; void taskmain(LPVOID param) ExampleTask * pTaskMain = (ExampleTask *) param; /YV pTaskMain void ExampleTask:StartTask() _beginthread(taskmain,0,this); int main(int argc, char* argv) ExampleTask realTimeTask; realTimeTask.StartTask

9、(); return 0; 3 Vd f LCid NE #Bt)/ FNW b 2.7yL L T“d1 3 Win324 CreateThread API L7y API HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes,/Pointer to a SECURITY_ATTRIBUTES structure SIZE_T dwStackSize, /Initial size of the stack, in bytes. LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lp

10、Parameter, /Pointer to a variable to be passed to the thread DWORD dwCreationFlags, /Flags that control the creation of the thread LPDWORD lpThreadId /Pointer to a variable that receives the thread identifier ); T P C/C+ILB ? P T“d4 CreateThread API7P C/C+ H o_beginthread _beginthreadex f uintptr_t

11、_beginthread( void( _cdecl *start_address )( void * ), /Start address of routine that begins execution of new thread unsigned stack_size, /Stack size for new thread or 0. void *arglist /Argument list to be passed to new thread or NULL ); uintptr_t _beginthreadex( void *security,/Pointer to a SECURIT

12、Y_ATTRIBUTES structure unsigned stack_size, unsigned ( _stdcall *start_address )( void * ), void *arglist, unsigned initflag,/Initial state of new thread (0 for running or CREATE_SUSPENDED for suspended); unsigned *thrdaddr ); _beginthreadf Win32 API CreateThreadf /s 1YV_beginthread f V V arglist| .

13、L 2_beginthread f S t C H oM L 1 P C H ob 3.L L / Z T 1Lf R 2L1 | fuExitCode !L| b i T P C/C+I P C/C+ H of _endthread (_endthreadex) L % ? P ExitThread _endthread f L =Hqb Y) L E |Yge5|b 3B L TerminateThreadf BOOL TerminateThread(HANDLE hThread,DWORD dwExitCode); f hThread Li dwExitCode !L| b LY H V

14、 Lf YLb 4cLb Kz P 1Z TL 24Z TRb 4.+ L 7yL H T . CREATE_SUSPENDEDS5L7y$+ P ResumeThread DWORD ResumeThread(HANDLE hThread); TResumeThreadf |RL -B T9 5R 0x FFFFFFFFb $+ L V SuspendThreadf #include #include #include DWORD WINAPI ThreadFunc(LPVOID); int main() HANDLE hThrd1; HANDLE hThrd2; DWORD exitCod

15、e1 = 0; DWORD exitCode2 = 0; DWORD threadId; hThrd1 = CreateThread(NULL, 0, ThreadFunc, (LPVOID)1, 0, if (hThrd1) printf(“Thread 1 launchedn“); hThrd2 = CreateThread(NULL, 0, ThreadFunc, (LPVOID)2, 0, if (hThrd2) printf(“Thread 2 launchedn“); / Keep waiting until both calls to GetExitCodeThread succ

16、eed AND / neither of them returns STILL_ACTIVE. for (;) printf(“Press any key to exitn“); getch(); GetExitCodeThread(hThrd1, GetExitCodeThread(hThrd2, if ( exitCode1 = STILL_ACTIVE ) puts(“Thread 1 is still running!“); if ( exitCode2 = STILL_ACTIVE ) puts(“Thread 2 is still running!“); if ( exitCode

17、1 != STILL_ACTIVE CloseHandle(hThrd1); CloseHandle(hThrd2); printf(“Thread 1 returned %dn“, exitCode1); printf(“Thread 2 returned %dn“, exitCode2); return EXIT_SUCCESS; /* * Take the startup value, do some simple math on it, * and return the calculated value. */ DWORD WINAPI ThreadFunc(LPVOID n) Sle

18、ep(DWORD)n*1000*2); return (DWORD)n * 10; YV/ V AL 4 # WINAPI CreateThreadf C H o_beginthread Y #define WIN32_LEAN_AND_MEAN #include #include #include DWORD WINAPI ThreadFunc(LPVOID); int main() HANDLE hThrd; DWORD threadId; int i; for (i = 0; i #include #include unsigned Counter; unsigned _stdcall

19、SecondThreadFunc(void *pArguments) printf(“In second thread.n“); while (Counter %dn“, Counter); / Destroy the thread object. CloseHandle(hThread); 0 Win32L !9LY 2005-12-16 08:48T )? 7?3 I Z e LWY 5 b L LW B1“BLG 6BLh 6BLh Hhr H$b L Z T“d yN VOID Rbf A LEnterCriticalSectionf -$ TBL km B S CRTICAL_SEC

20、TION * T| 49b “ “ u VOID WINAPI DeleteCriticalSection( LPCRITICAL_SECTION lpCriticalSection /_B1 CRITICAL_SECTIONM ); “ u VOID WINAPI EnterCriticalSection( LPCRITICAL_SECTION lpCriticalSection /_B F| CRITICAL_SECTIONM ); 7 “ u VOID WINAPI LeaveCriticalSection( LPCRITICAL_SECTION lpCriticalSection /_

21、B F| 7 CRITICAL_SECTIONM ); P “ uIBZE void UpdateData() EnterCriticalSection( ./do something LeaveCriticalSection( 1 “ u P/ i 1 Z PB CRITICAL_SECTIONM 21 HW1o B1o HW H L ? 3 T1 H5 V ? EnterCriticalSection 4Critical Section OS T “ uL“ +“ |E db “b Mutex b T Q ?BL 7? P CreateMutexf 7y HANDLE CreateMute

22、x( LPSECURITY_ATTRIBUTES lpMutexAttributes, / V NULL BOOL bInitialOwner, / TRUE FALSE LPCTSTR lpName /| ); Mutex V t/ V 6B Mutex 0 HANDLE hMutex; hMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, L“mutexName“); if (hMutex) b else M1API BOOL WINAPI ReleaseMutex( HANDLE hMutex ); PIBZE void UpdateResource()

23、 WaitForSingleObject(hMutex,); ./do something ReleaseMutex(hMutex); (mutex) = ? L b+ “ uM =7 “ u5 Z TyN mutex Critical Section/ 1 11o 1 2 L ? 3 L H V !B Hb /mW% “ u | | 0 KvWb| 9 v 0 H |7 9 0 H |b| e VK Zb | +o V/ + l 1 T - v 05 | r 2 T - 05| r 3“d % - 4 - % ?vKv b 7y| HANDLE CreateSemaphore ( PSECU

24、RITY_ATTRIBUTE psa, LONG lInitialCount, / 7 S H V P LONG lMaximumCount, /Kv PCTSTR pszName); db| YV ReleaseSemaphoref L ?S - 9f BOOL WINAPI ReleaseSemaphore( HANDLE hSemaphore, LONG lReleaseCount, /| - 9F lReleaseCount LPLONG lpPreviousCount ); u 7| B“| 9 VYV 3 tu 7| API HANDLE OpenSemaphore ( DWORD

25、 fdwAccess, BOOL bInherithandle, PCTSTR pszName ); A0 TZ T H f Mb 0 L H ? LB HW =Mb h A/ int globalVar = 0; DWORD WINAPI ThreadFunc1(LPVOID n) globalVar+; return 0; DWORD WINAPI ThreadFunc2(LPVOID n) globalVar+; return 0; ThreadFunc1 ThreadFunc2LT V y globalVar+i“BH 7 A A globalVar+QI 00401038 mov e

26、ax,globalVar (0042d3f0) 0040103D add eax,1 00401040 mov globalVar (0042d3f0),eax “mov eax,globalVar (0042d3f0)“ 7 “add eax,1“ 7#“add eax,1“ 7“mov globalVar (0042d3f0),eax“ 7W V ? 3L M P globalVarT ? b V P InterlockedExchangeAddf %5 int globalVar = 0; DWORD WINAPI ThreadFunc1(LPVOID n) InterlockedExc

27、hangeAdd( return 0; DWORD WINAPI ThreadFunc2(LPVOID n) InterlockedExchangeAdd( return 0; InterlockedExchangeAdd M globalVar “ 0“ b e d yB f CPU Yl 501Z T =Z T M MY1 1000 CPU b f ?BM 0 T11 1 P “ ub V H V H HW?W HW?1-|Y =b Y HW Tb 7y V H HANDLE CreateWaitableTimer( PSECURITY_ATTRISUTES psa, BOOL fManu

28、alReset,/ 1 H PCTSTR pszName); ! V H V H d /$7y SetWaitableTimer f H H$ BOOL SetWaitableTimer( HANDLE hTimer, /1 ! H const LARGE_INTEGER *pDueTime, / H BQ HW LONG lPeriod, / N H W HWBQ PTIMERAPCROUTINE pfnCompletionRoutine, PVOID PvArgToCompletionRoutine, BOOL fResume); |h V H BOOl Cancel WaitableTi

29、mer( HANDLE hTimer /1 |h H ); u 7 V H TB =WaitableTimer 9 V$ 3u 7 HANDLE OpenWaitableTimer ( DWORD fdwAccess, BOOL bInherithandle, PCTSTR pszName ); L / B V ? 3 C #include #include CRITICAL_SECTION cs1, cs2; long WINAPI ThreadFn(long); main() long iThreadID; InitializeCriticalSection( InitializeCrit

30、icalSection( CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)ThreadFn, NULL, 0, while (TRUE) EnterCriticalSection( printf(“nL 1 “ u 1“); EnterCriticalSection( printf(“nL 1 “ u 2“); printf(“nL 1 “ u“); LeaveCriticalSection( LeaveCriticalSection( printf(“nL 1 db “ u“); Sleep(20); ; return (0); long WINAPI ThreadFn(long lParam) while (TRUE) EnterCriticalSection( printf(“nL 2 “ u 2“); EnterCriticalSection( printf(“nL 2 “ u 1“); printf(“nL 2 “ u“); LeaveCriticalSection( LeaveCriticalSection( printf(“nL 2 d

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报