久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Windows編程基礎(chǔ) 第十四章 進(jìn)程 作業(yè) 線程 線程局部存儲(chǔ)

 漓云齋 2017-09-26










  1. // 本程序演示系統(tǒng)環(huán)境信息的獲取,,環(huán)境變量的設(shè)置和獲取  
  2. #include "stdafx.h"  
  3. #include "windows.h"  
  4. #include "tchar.h"  
  5. #include "locale.h"  
  6. #define  MAX_LENGTH 1024  
  7. /* 
  8. GetEnvironmentStrings() 
  9.  
  10. FreeEnvironmentStrings() 
  11.  
  12. GetEnvironmentVariable() 
  13.  
  14. setenvironmentv() 
  15. */  
  16.   
  17. VOID EnvVariable(TCHAR * pszVar)  
  18. {  
  19.     SetEnvironmentVariable(pszVar,TEXT("C:\\"));//參數(shù)一:The name of the environment variable.參數(shù)二:The contents of the environment variable.   
  20.     TCHAR szValue[MAX_LENGTH]={0};  
  21.     GetEnvironmentVariable(pszVar,szValue,MAX_LENGTH);  
  22.     _tprintf(TEXT("%s=%s"),pszVar,szValue);  
  23.   
  24. }  
  25.   
  26. VOID EnvString()  
  27. {  
  28.     TCHAR * pszEnv=GetEnvironmentStrings();//取得系統(tǒng)環(huán)境信息,,返回一個(gè)字符串的串  
  29.     TCHAR * pszTmp=pszEnv;  
  30.     while (pszTmp[0]!=0)  
  31.     {  
  32.         _tprintf(TEXT("%s\n"),pszTmp);  
  33.         pszTmp=_tcslen(pszTmp)+1+pszTmp;  
  34.     }  
  35.     FreeEnvironmentStrings(pszEnv);//釋放環(huán)境信息  
  36. }  
  37.   
  38. int _tmain(int argc, _TCHAR* argv[])  
  39. {  
  40.     setlocale(LC_ALL,"zhi");  
  41.         _tprintf(TEXT("取得的系統(tǒng)信息如下:\n"));  
  42.     EnvString();  
  43.     _tprintf(TEXT("-------------------------------------------\n"));  
  44.      EnvVariable(TEXT("MYPATH"));  
  45.      _tprintf(TEXT("\n-------------------------------------------\n"));  
  46.     return 0;  
  47. }  


  1. //  本程序用來(lái)演示基本的進(jìn)程信息和PSAPI這個(gè)WIN  NT擴(kuò)展庫(kù)的使用  
  2. #include "stdafx.h"  
  3. #include "windows.h"  
  4. #include "tchar.h"  
  5. #include "locale.h"  
  6. #include "../psapi/PSAPI.H"  //加載process  status  API庫(kù)的頭文件  
  7. #pragma comment(lib,"../psapi/psapi.lib")//隱式加載process  status  API動(dòng)態(tài)庫(kù)  
  8.   
  9. VOID ProcModule()  
  10. {  
  11.     //枚舉當(dāng)前進(jìn)程的所有的模塊  
  12.     _tprintf(TEXT("All Modules:\n"));  
  13.     HANDLE hProc=GetCurrentProcess();//取得當(dāng)前進(jìn)程的偽句柄。  
  14.   
  15.     /* 
  16.     BOOL WINAPI EnumProcessModules( 
  17.                                         __in   HANDLE hProcess, 
  18.                                         __out  HMODULE *lphModule, 
  19.                                         __in   DWORD cb,//The size of the lphModule array, in bytes.注意是字節(jié)數(shù) 
  20.                                         __out  LPDWORD lpcbNeeded//The number of bytes required to store all module handles in the lphModule array.注意也是字節(jié)數(shù) 
  21.     ); 
  22.     */  
  23.     HMODULE hModule[260]={0};//定義一個(gè)模塊數(shù)組,,作為EnumProcessModules()的出參,。  
  24.     DWORD nWriteCount=0;//返回寫(xiě)入的模塊的數(shù)量  
  25.     EnumProcessModules(hProc,hModule,260,&nWriteCount);//枚舉進(jìn)程的所有的模塊  
  26.     DWORD nSize=sizeof(HMODULE);//4個(gè)字節(jié)  
  27.     DWORD    nCount=nWriteCount/nSize;//100字節(jié)/4字節(jié)  
  28.     for (int nIndex=0;nIndex<nCount;nIndex++)  
  29.     {  
  30.         TCHAR szPath[260]={0};  
  31.         GetModuleFileNameEx(hProc,hModule[nIndex],szPath,260);//通過(guò)模塊句柄返回模塊的名字  
  32.         _tprintf(TEXT("\t%d:%p=%s\n"),nIndex+1,hModule[nIndex],szPath);//0x 00 d0 00 00  4個(gè)字節(jié)  
  33.     }  
  34.   
  35. }  
  36.   
  37. VOID ProcInfo()  
  38. {  
  39.     //獲取進(jìn)程的ID  
  40.     DWORD nID=GetCurrentProcessId();  
  41.     //獲取進(jìn)程的偽句柄  
  42.     HANDLE hProc=GetCurrentProcess();  
  43.     _tprintf(TEXT("\n\t當(dāng)前的進(jìn)程ID是:%d,進(jìn)程的偽句柄的數(shù)值是:%p\n"),nID,hProc);//hProc的十六進(jìn)制數(shù)值是FFFFFFFF十進(jìn)制數(shù)值是-1。  
  44.     hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,nID);//通過(guò)指定的進(jìn)程ID獲取進(jìn)程的句柄,。  
  45.     _tprintf(TEXT("\t當(dāng)前進(jìn)程的真正的句柄是:%p\n\n"),hProc);  
  46. }  
  47.   
  48.   
  49. int _tmain(int argc, _TCHAR* argv[])  
  50. {  
  51.     setlocale(LC_ALL,"zhi");  
  52.     ProcModule();  
  53.     ProcInfo();  
  54.     return 0;  
  55. }  

  1. //本程序用來(lái)演示進(jìn)程的創(chuàng)建,,銷(xiāo)毀,等待  
  2.   
  3. #include "stdafx.h"  
  4. #include "windows.h"  
  5. #include "tchar.h"  
  6. #include "locale.h"  
  7.   
  8. VOID  CreateProcess()  
  9. {  
  10.     /* 
  11.     BOOL WINAPI CreateProcess( 
  12.                                 __in_opt     LPCTSTR lpApplicationName, 
  13.                                 __inout_opt  LPTSTR lpCommandLine, 
  14.                                 __in_opt     LPSECURITY_ATTRIBUTES lpProcessAttributes, 
  15.                                 __in_opt     LPSECURITY_ATTRIBUTES lpThreadAttributes, 
  16.                                 __in         BOOL bInheritHandles, 
  17.                                 __in         DWORD dwCreationFlags, 
  18.                                 __in_opt     LPVOID lpEnvironment, 
  19.                                 __in_opt     LPCTSTR lpCurrentDirectory, 
  20.                                 __in         LPSTARTUPINFO lpStartupInfo, 
  21.                                 __out        LPPROCESS_INFORMATION lpProcessInformation 
  22.     );   
  23.     */  
  24.     STARTUPINFO  start_info={0};  
  25.     start_info.cb=sizeof(STARTUPINFO);  
  26.     start_info.dwFlags= STARTF_USESIZE|STARTF_USESTDHANDLES;//如果想要使用下面的兩個(gè)參數(shù)調(diào)整窗口的大小,,那么一定要指定這個(gè)標(biāo)示  
  27.     start_info.dwXSize=300;//通過(guò)下面的兩個(gè)參數(shù)調(diào)整窗口的大小  
  28.     start_info.dwYSize=300;  
  29.   
  30.     PROCESS_INFORMATION Process_info={0};  
  31.     //創(chuàng)建進(jìn)程,但是無(wú)法創(chuàng)建,,因?yàn)镈OS方式的控制臺(tái)的16位程序必須使用第二個(gè)參數(shù)所以這句執(zhí)行之后是看不到,ChildProc.exe程序運(yùn)行的  
  32.     //CreateProcess(TEXT("C:\\ChildProc.exe"),TEXT("\"Hello Child\""),NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&start_info,&Process_info);  
  33.      CreateProcess(NULL,TEXT("C:\\ChildProc.exe"),NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&start_info,&Process_info);  
  34.      //這個(gè)函數(shù)在VC++6.0   XP環(huán)境下運(yùn)行成功,,但是WIN7   VS2010不行  
  35.     //數(shù)據(jù)進(jìn)程的相關(guān)的信息  
  36.     _tprintf(TEXT("進(jìn)程的句柄是:%p\n"),Process_info.hProcess);  
  37.     _tprintf(TEXT("進(jìn)程的ID是:%d\n"),Process_info.dwProcessId);  
  38.     _tprintf(TEXT("線程的句柄是:%p\n"),Process_info.hThread);  
  39.     _tprintf(TEXT("線程的ID是:%d\n"),Process_info.dwThreadId);  
  40. }  
  41.   
  42. VOID TerminateProc(DWORD nID)  
  43. {  
  44.     //根據(jù)進(jìn)程的ID獲取進(jìn)程的句柄  
  45.     HANDLE hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,nID);  
  46.     //終止進(jìn)程  
  47.     TerminateProcess(hProc,0);  
  48. }  
  49.   
  50. VOID WaitProcess()  
  51. {  
  52.     //創(chuàng)建進(jìn)程  
  53.     STARTUPINFO si = { 0 };  
  54.     PROCESS_INFORMATION pi = { 0 };  
  55.     si.cb = sizeof( si );//這個(gè)參數(shù)是必須進(jìn)行賦值的,,原因好像在windows核心編程中講過(guò),但是我忘記了  
  56.     CreateProcess( TEXT("C:\\MineSweeper.exe"),NULL, NULL, NULL, FALSE, 0,NULL, NULL, &si, &pi );  
  57.     _tprintf(TEXT("掃雷程序正在運(yùn)行,!\n"));  
  58.     WaitForSingleObject(pi.hProcess,9000000);  
  59.     _tprintf(TEXT("掃雷程序結(jié)束運(yùn)行,!\n"));  
  60.   
  61. }  
  62.   
  63. int _tmain(int argc, _TCHAR* argv[])  
  64. {  
  65.     setlocale(LC_ALL,"zhi");  
  66.     CreateProcess();  
  67.     //TerminateProc( 5368 );//結(jié)束一個(gè)進(jìn)程,,當(dāng)前任務(wù)管理器中的這個(gè)進(jìn)程是QQ  
  68.     //WaitProcess();  
  69.     return 0;  
  70. }  

下面的兩個(gè)程序功能是一樣的,代碼基本上是一樣的,。都是創(chuàng)建一個(gè)作業(yè)然后在作業(yè)中添加了兩個(gè)進(jìn)程,,我們對(duì)作業(yè)進(jìn)行了功能的限制,限制在作業(yè)中的進(jìn)程都不能使用剪切板的功能,,但是我們驚奇的發(fā)現(xiàn)同樣的程序在  WIN7  操作系統(tǒng)上,,使用VS2010  和  在XP操作系統(tǒng)上使用   VC++6.0   代碼運(yùn)行之后出現(xiàn)的效果是完全不同的。

我們?cè)赩C++6.0上程序運(yùn)行的時(shí)候,,完全能夠?qū)崿F(xiàn)限制剪切板的操作,。也就是剪切板不能使用,進(jìn)行復(fù)制和黏貼的操作,。但是同樣的程序在VS2010下執(zhí)行的時(shí)候,,剪切板的功能竟然能夠使用!?。,。。,?!具體的原因到現(xiàn)在還有找到。,。,。。,。找到之后再記錄下來(lái),。


  1. //本程序用來(lái)演示作業(yè)的使用   在WIN7系統(tǒng)和VS2010編譯環(huán)境下運(yùn)行。無(wú)法實(shí)現(xiàn)限制剪切板的功能  
  2. #include "stdafx.h"  
  3. #include "windows.h"  
  4. #include "tchar.h"  
  5. #include "locale.h"  
  6.   
  7. HANDLE Create(TCHAR  * szPath)//根據(jù)指定的引用程序名字創(chuàng)建一個(gè)進(jìn)程,,然會(huì)返回進(jìn)程的句柄  
  8. {  
  9.     STARTUPINFO   si={0};  
  10.     PROCESS_INFORMATION  pi={0};  
  11.     si.cb=sizeof(STARTUPINFO);  
  12.     CreateProcess(szPath,NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);  
  13.     return pi.hProcess;  
  14. }  
  15.   
  16. VOID   Job()  
  17. {  
  18.     //創(chuàng)建Job對(duì)象  
  19.     HANDLE hJob = CreateJobObject( NULL,TEXT( "MyJob") );  
  20.     //設(shè)置權(quán)限  
  21.     JOBOBJECT_BASIC_UI_RESTRICTIONS ui = {0};  
  22.     ui.UIRestrictionsClass = JOB_OBJECT_UILIMIT_READCLIPBOARD|JOB_OBJECT_UILIMIT_WRITECLIPBOARD;  
  23.     SetInformationJobObject( hJob,JobObjectBasicUIRestrictions,&ui,sizeof(ui));  
  24.     //創(chuàng)建進(jìn)程  
  25.     HANDLE hProc =Create(TEXT("c:\\mspaint.exe" ));  
  26.     //將進(jìn)程加入作業(yè)  
  27.     AssignProcessToJobObject(hJob, hProc);  
  28.   
  29.      hProc=Create(TEXT("c:\\mspaint.exe"));  
  30.     AssignProcessToJobObject(hJob, hProc );  
  31.     getchar( );  
  32.     //結(jié)束作業(yè)  
  33.     TerminateJobObject( hJob, 0 );  
  34.     //關(guān)閉Job  
  35.     CloseHandle( hJob );  
  36. }  
  37.   
  38. int _tmain(int argc, _TCHAR* argv[])  
  39. {  
  40.       
  41.     Job();  
  42.     return 0;  
  43. }  

  1. // 本程序在XP操作系統(tǒng)上,,使用VC++6.0環(huán)境,我們可以看到程序能實(shí)現(xiàn)限制畫(huà)圖程序的剪切板的使用的功能  
  1. //本程序運(yùn)行的時(shí)候需要在stdafx.cpp文件中添加宏定義:#define  _WIN32_WINNT 0X0500  
  2. //本程序用來(lái)演示作業(yè)的使用  
  3.   
  4. #include "stdafx.h"  
  5. #include "windows.h"  
  6. #include "tchar.h"  
  7. #include "locale.h"  
  8.   
  9.   
  10. HANDLE Create(TCHAR  * szPath)//根據(jù)指定的引用程序名字創(chuàng)建一個(gè)進(jìn)程,,然會(huì)返回進(jìn)程的句柄  
  11. {  
  12.     STARTUPINFO   si={0};  
  13.     PROCESS_INFORMATION  pi={0};  
  14.     si.cb=sizeof(STARTUPINFO);  
  15.     CreateProcess(szPath,NULL,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi);  
  16.     return pi.hProcess;  
  17. }  
  18.   
  19. VOID   Job()  
  20. {  
  21.     //創(chuàng)建Job對(duì)象  
  22.     HANDLE hJob = CreateJobObject( NULL,TEXT( "MyJob") );  
  23.     //設(shè)置權(quán)限  
  24.     JOBOBJECT_BASIC_UI_RESTRICTIONS ui = {0};  
  25.     ui.UIRestrictionsClass = JOB_OBJECT_UILIMIT_READCLIPBOARD|JOB_OBJECT_UILIMIT_WRITECLIPBOARD;  
  26.     SetInformationJobObject( hJob,JobObjectBasicUIRestrictions,&ui,sizeof(ui));  
  27.     //創(chuàng)建進(jìn)程  
  28.     HANDLE hProc =Create(TEXT("C:\\mspaint.exe" ));  
  29.     //將進(jìn)程加入作業(yè)  
  30.     AssignProcessToJobObject(hJob, hProc);  
  31.       
  32.     hProc=Create(TEXT("C:\\mspaint.exe"));  
  33.     AssignProcessToJobObject(hJob, hProc );  
  34.     getchar( );  
  35.     //結(jié)束作業(yè)  
  36.     TerminateJobObject( hJob, 0 );  
  37.     //關(guān)閉Job  
  38.     CloseHandle( hJob );  
  39. }  
  40.   
  41. int _tmain(int argc, _TCHAR* argv[])  
  42. {  
  43.       
  44.     Job();  
  45.     return 0;  
  46. }  

  1. //本程序用來(lái)演示進(jìn)程的創(chuàng)建,,銷(xiāo)毀,等待  
  2.   
  3. #include "stdafx.h"  
  4. #include "windows.h"  
  5. #include "tchar.h"  
  6. #include "locale.h"  
  7.   
  8. VOID  CreateProcess()  
  9. {  
  10.     /* 
  11.     BOOL WINAPI CreateProcess( 
  12.                                 __in_opt     LPCTSTR lpApplicationName, 
  13.                                 __inout_opt  LPTSTR lpCommandLine, 
  14.                                 __in_opt     LPSECURITY_ATTRIBUTES lpProcessAttributes, 
  15.                                 __in_opt     LPSECURITY_ATTRIBUTES lpThreadAttributes, 
  16.                                 __in         BOOL bInheritHandles, 
  17.                                 __in         DWORD dwCreationFlags, 
  18.                                 __in_opt     LPVOID lpEnvironment, 
  19.                                 __in_opt     LPCTSTR lpCurrentDirectory, 
  20.                                 __in         LPSTARTUPINFO lpStartupInfo, 
  21.                                 __out        LPPROCESS_INFORMATION lpProcessInformation 
  22.     );   
  23.     */  
  24.     STARTUPINFO  start_info={0};  
  25.     start_info.cb=sizeof(STARTUPINFO);  
  26.     start_info.dwFlags= STARTF_USESIZE|STARTF_USESTDHANDLES;//如果想要使用下面的兩個(gè)參數(shù)調(diào)整窗口的大小,,那么一定要指定這個(gè)標(biāo)示  
  27.     start_info.dwXSize=300;//通過(guò)下面的兩個(gè)參數(shù)調(diào)整窗口的大小  
  28.     start_info.dwYSize=300;  
  29.   
  30.     PROCESS_INFORMATION Process_info={0};  
  31.     //創(chuàng)建進(jìn)程,但是無(wú)法創(chuàng)建,,因?yàn)镈OS方式的控制臺(tái)的16位程序必須使用第二個(gè)參數(shù)所以這句執(zhí)行之后是看不到,ChildProc.exe程序運(yùn)行的  
  32.     //CreateProcess(TEXT("C:\\ChildProc.exe"),TEXT("\"Hello Child\""),NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&start_info,&Process_info);  
  33.      CreateProcess(NULL,TEXT("C:\\ChildProc.exe"),NULL,NULL,FALSE,CREATE_NEW_CONSOLE,NULL,NULL,&start_info,&Process_info);  
  34.      //這個(gè)函數(shù)在VC++6.0   XP環(huán)境下運(yùn)行成功,,但是WIN7   VS2010不行  
  35.     //數(shù)據(jù)進(jìn)程的相關(guān)的信息  
  36.     _tprintf(TEXT("進(jìn)程的句柄是:%p\n"),Process_info.hProcess);  
  37.     _tprintf(TEXT("進(jìn)程的ID是:%d\n"),Process_info.dwProcessId);  
  38.     _tprintf(TEXT("線程的句柄是:%p\n"),Process_info.hThread);  
  39.     _tprintf(TEXT("線程的ID是:%d\n"),Process_info.dwThreadId);  
  40. }  
  41.   
  42. VOID TerminateProc(DWORD nID)  
  43. {  
  44.     //根據(jù)進(jìn)程的ID獲取進(jìn)程的句柄  
  45.     HANDLE hProc=OpenProcess(PROCESS_ALL_ACCESS,FALSE,nID);  
  46.     //終止進(jìn)程  
  47.     TerminateProcess(hProc,0);  
  48. }  
  49.   
  50. VOID WaitProcess()  
  51. {  
  52.     //創(chuàng)建進(jìn)程  
  53.     STARTUPINFO si = { 0 };  
  54.     PROCESS_INFORMATION pi = { 0 };  
  55.     si.cb = sizeof( si );//這個(gè)參數(shù)是必須進(jìn)行賦值的,,原因好像在windows核心編程中講過(guò),但是我忘記了  
  56.     CreateProcess( TEXT("C:\\winmine.exe"),NULL, NULL, NULL, FALSE, 0,NULL, NULL, &si, &pi );  
  57.     _tprintf(TEXT("掃雷程序正在運(yùn)行!\n"));  
  58.     WaitForSingleObject(pi.hProcess,INFINITE);  
  59.     _tprintf(TEXT("掃雷程序結(jié)束運(yùn)行,!\n"));  
  60.   
  61. }  
  62.   
  63. int _tmain(int argc, _TCHAR* argv[])  
  64. {  
  65.     setlocale(LC_ALL,"zhi");  
  66. //  CreateProcess();  
  67.     //TerminateProc( 5368 );//結(jié)束一個(gè)進(jìn)程,,當(dāng)前任務(wù)管理器中的這個(gè)進(jìn)程是QQ  
  68.     WaitProcess();  
  69.     return 0;  
  70. }  

  1. // 本程序用來(lái)演示線程的創(chuàng)建和使用  
  2. //  
  3.   
  4. #include "stdafx.h"  
  5. #include "windows.h"  
  6. #include "tchar.h"  
  7. #include "locale.h"  
  8.   
  9. DWORD WINAPI ThreadProc1(LPVOID lpParameter)  
  10. {  
  11.     DWORD nValue=(DWORD)lpParameter;//把傳遞進(jìn)來(lái)的數(shù)值強(qiáng)制類(lèi)型轉(zhuǎn)換成為一個(gè)DWORD類(lèi)型的數(shù)值  
  12.     for (int nIndex=0;nIndex<10;nIndex++)  
  13.     {  
  14.         _tprintf(TEXT("線程一  --------------%d\n"),nValue);  
  15.         Sleep(1000);  
  16.     }  
  17.     return 0;  
  18. }  
  19.   
  20. DWORD WINAPI ThreadProc2(LPVOID lpParameter)  
  21. {  
  22.     while(1)  
  23.     {  
  24.         _tprintf(TEXT("----------------------線程二\n"));  
  25.         Sleep(1000);  
  26.     }  
  27.     return 0;  
  28. }  
  29.   
  30. VOID Create()  
  31. {  
  32.     DWORD nValue=100;  
  33.     DWORD nThreadId=0;  
  34.     //創(chuàng)建一個(gè)掛起的線程  
  35.     HANDLE hThread=CreateThread(NULL,0,ThreadProc1,(LPVOID)nValue,CREATE_SUSPENDED,&nThreadId);  
  36.     _tprintf(TEXT("線程1的線程ID:%d\n"),nThreadId);  
  37.     _tprintf(TEXT("線程1的線程句柄是:%p\n"),hThread);  
  38.     ResumeThread(hThread);//恢復(fù)線程使線程開(kāi)始運(yùn)行。  
  39.     WaitForSingleObject(hThread,INFINITE);//等候線程1的運(yùn)行的結(jié)束  
  40.     CloseHandle(hThread);  
  41.   
  42.     hThread=CreateThread(NULL,0,ThreadProc2,NULL,0,&nThreadId);  
  43.     _tprintf(TEXT("線程2的線程ID:%d\n"),nThreadId);  
  44.     _tprintf(TEXT("線程2的線程句柄是:%p\n"),hThread);  
  45.     //掛起線程  
  46.     //SuspendThread(hThread);  
  47.     //WaitForSingleObject(hThread,INFINITE);//沒(méi)有這條語(yǔ)句,,我們會(huì)看不到線程2的執(zhí)行,,會(huì)值打印出線程2的ID就結(jié)束了。  
  48.     CloseHandle(hThread);  
  49. }  
  50.   
  51. int _tmain(int argc, _TCHAR* argv[])  
  52. {  
  53.     setlocale(LC_ALL,"zhi");  
  54.     Create();  
  55.     return 0;  
  56. }  
  1. <pre name="code" class="cpp">// 線程局部存儲(chǔ)TLS  
  2. //  
  3. #include "stdafx.h"  
  4. #include "windows.h"  
  5. #include "tchar.h"  
  6. #include "locale.h"  
  7.   
  8. TCHAR * g_pszText1=NULL;  
  9.   
  10. __declspec(thread)  TCHAR * g_pszText2=NULL;  
  11.   
  12. VOID  Print( )  
  13. {  
  14.     _tprintf(TEXT("Text1:%s\n"),g_pszText1);  
  15.     //_tprintf(TEXT("Text2:%s\n"),g_pszText2);  
  16. }  
  17.   
  18.   
  19. DWORD WINAPI  PrintProc( LPVOID lpParameter)  
  20. {  
  21.     TCHAR * pszText=(TCHAR *) lpParameter;  
  22.     g_pszText1=(TCHAR *)malloc(100);  
  23.     memset(g_pszText1,0,100);  
  24.     _tcscpy(g_pszText1,pszText);  
  25.   
  26.     g_pszText2=(TCHAR *)malloc(100);  
  27.     memset(g_pszText2,0,100);  
  28.     _tcscpy(g_pszText2,pszText);  
  29.       
  30.     while(1)  
  31.     {    
  32.         Print();  
  33.         Sleep(1000);  
  34.     }  
  35.     return 0;  
  36. }  
  37.   
  38. VOID Create()  
  39. {  
  40.     DWORD dwThread=0;  
  41.   
  42.     TCHAR szText1[]=TEXT("線程1-------------------");  
  43.     HANDLE hThread=CreateThread(NULL,0,PrintProc,szText1,0,&dwThread);  
  44.   
  45.     TCHAR szText2[]=TEXT("-----------線程2--------");  
  46.     hThread=CreateThread(NULL,0,PrintProc,szText2,0,&dwThread);  
  47.   
  48.     TCHAR szText3[]=TEXT("-------------------線程3");  
  49.     hThread=CreateThread(NULL,0,PrintProc,szText3,0,&dwThread);  
  50.     getchar();//這個(gè)getchar()必須放在Create()函數(shù)中,,而不能放在main()函數(shù)中,。否則會(huì)出現(xiàn)亂碼因?yàn)閟zText[]都是局部變量。  
  51. }  
  52.   
  53.   
  54. int _tmain(int argc, _TCHAR* argv[])  
  55. {  
  56.     setlocale(LC_ALL,"chs");  
  57.     Create();  
  58.     return 0;  
  59. }  





    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多