vc++socket笔记2-2
退出线程的方式
示例1:线程中用ExitThread();函数中的参数为返回值。
#include<Windows.h> #include<strsafe.h>// 缓冲区处理 #define BUF_SIZE 255 DWORD WINAPI ThreadProc(LPVOID lpParam)// LPVOID 是 void* 的意思 { HANDLE hStdout; TCHAR msgBuf[BUF_SIZE]; // TCHAR 是 WCHAR 的别名,是宽字符的意思,也就是两字节的字符类型,类似汉字 size_t cchStringSize; DWORD dwChars; hStdout = GetStdHandle(STD_OUTPUT_HANDLE); //得到标准输出设备的句柄,用于打印 if (hStdout == INVALID_HANDLE_VALUE)return 1; // 双引号前加L表示是宽字符 StringCchPrintf(msgBuf, BUF_SIZE, L"线程ID=%d\n",GetCurrentThreadId());// 代替sprintf StringCchLength(msgBuf, BUF_SIZE, &cchStringSize); // 代替strlen WriteConsole(hStdout, msgBuf, cchStringSize, &dwChars, NULL);// 代替printf //HeapFree(GetProcessHeap(), 0, pData);// 释放内存 WriteConsole(hStdout, L"线程即将结束\n", 7, &dwChars, NULL); ExitThread(5); WriteConsole(hStdout, L"这句话不会打印", 7, &dwChars, NULL); return 0; } int main(int argc, TCHAR* argv[]) { HANDLE h; DWORD dwCode, dwID; h = CreateThread(NULL, 0, ThreadProc, NULL, 0, &dwID); Sleep(1500); GetExitCodeThread(h, &dwCode); printf("ID为%d的线程退出码:%d\n", dwID, dwCode); CloseHandle(h); return 0; }

示例2:TerminateThread,据说用这个会导致死锁,但是我运行起来没问题啊?有大佬知道什么原因吗?
#include<Windows.h> #include<strsafe.h>// 缓冲区处理 DWORD WINAPI ThreadProc(LPVOID lpParam)// LPVOID 是 void* 的意思 { char* p; while (1) { p = new char[5]; delete[]p; } return 0; } int main(int argc, TCHAR* argv[]) { HANDLE h; char* q; h = CreateThread(NULL, 0, ThreadProc, NULL, 0,NULL); Sleep(1500); TerminateThread(h, 0); q = new char[2]; printf("分配成功\n"); delete[]q; CloseHandle(h); return 0; }

示例3:WaitForSingleObject(HANDLE,DWORD);
#include<Windows.h> BOOL gbExit = TRUE; DWORD WINAPI ThreadProc(LPVOID lpParam)// LPVOID 是 void* 的意思 { char* p; while (gbExit) { p = new char[5]; delete[]p; } return 0; } int main(int argc, TCHAR* argv[]) { HANDLE h; char* q; h = CreateThread(NULL, 0, ThreadProc, NULL, 0,NULL); Sleep(1500); gbExit = false; WaitForSingleObject(h, INFINITE);// INFINITE表示永久等待,线程不停进程不止 h = NULL; q = new char[2]; WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), L"分配成功", 5, NULL, NULL); delete[]q; CloseHandle(h); return 0; }

浙公网安备 33010602011771号