日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

windows结束线程的三种方式

發布時間:2025/3/21 windows 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 windows结束线程的三种方式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

windows 結束線程有三種方式

一、讓線程函數執行到 return

二、在線程函數內調用 ExitThread

三、調用 TerminateThread

其中前兩種方式比較類似,它們都是通過修改某個變量來達到改變子線程執行流程,從而實現退出的目的。這兩種方式是同步的,安全的,線程退出后會系統會清理堆棧。

第三種方式 TerminateThread 是異步的,它會創建一個新的線程去結束我們希望干掉的線程,該函數立即返回,是異步的。如果程序希望線程真的結束,然后再往下走,那么就需要在 TerminateThread 后面調用 WaitForSingleObject 函數,阻塞等待線程真的結束。

如果希望子線程安全地退出,并執行釋放資源代碼,使用方式一;
如果希望子線程直接退出,沒有需要釋放的資源,可以使用方式二;
第三種方式結束線程不安全,系統不會清理子線程的堆棧,不推薦使用。

這是我寫的一個測試程序:

下面附上三種結束方式的實現

方式一(推薦)

// ThreadOperatorGUI.cpp : Defines the entry point for the application. //#include "stdafx.h"BOOL flag = TRUE; // 控制子線程結束DWORD WINAPI MyThread(LPVOID lpParam) {HWND hEdit = (HWND)lpParam;TCHAR szBuffer[10];GetWindowText(hEdit, szBuffer, 10); for (int i = 0; i <= 10000; i++){if (!flag) break;_stprintf(szBuffer, TEXT("%d"), i);SetWindowText(hEdit, szBuffer); Sleep(200);}return 0; }BOOL CALLBACK MainDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {static HWND hEdit;static HANDLE hThread;switch(uMsg){case WM_CLOSE:{EndDialog(hDlg, 0);return TRUE;}case WM_INITDIALOG:{hEdit = GetDlgItem(hDlg, IDC_EDIT);SetWindowText(hEdit, "0");return TRUE;}case WM_COMMAND:{switch(LOWORD(wParam)){case IDC_BUTTON1:{hThread = CreateThread(0, 0, MyThread, hEdit, 0, 0);return TRUE;}case IDC_BUTTON2:{SuspendThread(hThread);return TRUE;}case IDC_BUTTON3:{ResumeThread(hThread);return TRUE;}case IDC_BUTTON4:{flag = FALSE;return TRUE;}}}}return FALSE; }int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, MainDialogProc);return 0; }

方式二

// ThreadOperatorGUI.cpp : Defines the entry point for the application. //#include "stdafx.h"BOOL flag = TRUE; // 控制子線程結束DWORD WINAPI MyThread(LPVOID lpParam) {HWND hEdit = (HWND)lpParam;TCHAR szBuffer[10];GetWindowText(hEdit, szBuffer, 10); for (int i = 0; i <= 10000; i++){if (!flag) ExitThread(1);_stprintf(szBuffer, TEXT("%d"), i);SetWindowText(hEdit, szBuffer); Sleep(200);}return 0; }BOOL CALLBACK MainDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {static HWND hEdit;static HANDLE hThread;switch(uMsg){case WM_CLOSE:{EndDialog(hDlg, 0);return TRUE;}case WM_INITDIALOG:{hEdit = GetDlgItem(hDlg, IDC_EDIT);SetWindowText(hEdit, "0");return TRUE;}case WM_COMMAND:{switch(LOWORD(wParam)){case IDC_BUTTON1:{hThread = CreateThread(0, 0, MyThread, hEdit, 0, 0);return TRUE;}case IDC_BUTTON2:{SuspendThread(hThread);return TRUE;}case IDC_BUTTON3:{ResumeThread(hThread);return TRUE;}case IDC_BUTTON4:{flag = FALSE;return TRUE;}}}}return FALSE; }int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, MainDialogProc);return 0; }

方式三(不推薦)

// ThreadOperatorGUI.cpp : Defines the entry point for the application. //#include "stdafx.h"DWORD WINAPI MyThread(LPVOID lpParam) {HWND hEdit = (HWND)lpParam;TCHAR szBuffer[10];GetWindowText(hEdit, szBuffer, 10); for (int i = 0; i <= 10000; i++){_stprintf(szBuffer, TEXT("%d"), i);SetWindowText(hEdit, szBuffer); Sleep(200);}return 0; }BOOL CALLBACK MainDialogProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {static HWND hEdit;static HANDLE hThread;switch(uMsg){case WM_CLOSE:{EndDialog(hDlg, 0);return TRUE;}case WM_INITDIALOG:{hEdit = GetDlgItem(hDlg, IDC_EDIT);SetWindowText(hEdit, "0");return TRUE;}case WM_COMMAND:{switch(LOWORD(wParam)){case IDC_BUTTON1:{hThread = CreateThread(0, 0, MyThread, hEdit, 0, 0);return TRUE;}case IDC_BUTTON2:{SuspendThread(hThread);return TRUE;}case IDC_BUTTON3:{ResumeThread(hThread);return TRUE;}case IDC_BUTTON4:{TerminateThread(hThread, 123); // 結束碼123,可自定義WaitForSingleObject(hThread, INFINITE); // 阻塞,直到hThread結束return TRUE;}}}}return FALSE; }int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), 0, MainDialogProc);return 0; } 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的windows结束线程的三种方式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 六月综合网 | 人妖交videohd另类 | 国产精品乱 | 亚洲女人初尝黑人巨大 | 色精品视频 | 天天操夜夜操夜夜操 | 69视频免费看 | 欧美 亚洲 另类 激情 另类 | 日韩一级欧美一级 | 国产精品播放 | 狼人综合网 | 亚洲高清一区二区三区 | 91人妻一区二区三区蜜臀 | 亚洲色图 在线视频 | 亚洲成年人免费观看 | 欧美一区二区三区系列电影 | 久久久欧美| 寂寞d奶大胸少妇 | 成人免费毛片足控 | 香蕉a视频 | 色小姐com| 亚洲欧美va天堂人熟伦 | free性欧美69巨大 | 久久久www | 九色tv | 日韩另类 | 青娱乐极品在线 | 天天操天天艹 | 国产精品你懂的 | 亚洲三级一区 | 欧美日韩小视频 | 精品98| 国产精品第| 91久久综合精品国产丝袜蜜芽 | 久久情趣视频 | 日本一级大毛片a一 | 三级欧美韩日大片在线看 | 成人免费大片黄在线播放 | 国产又粗又猛又爽 | 久操福利视频 | 中文字幕高潮 | 亚洲人免费| 成人毛片100部免费看 | 久久尤物| 久久久久久久久久久丰满 | av片观看 | 欧美亚洲免费 | 都市激情 自拍偷拍 | 神马久久春色 | 白白色2012年最新视频 | 黄色片视频免费看 | 免费观看一级黄色片 | 欧美大喷水吹潮合集在线观看 | 伊人av在线| 自拍偷拍精品 | 欧美日韩国产大片 | 性奶老妇 视频 | 自拍三级 | 福利视频二区 | 男女搞网站 | 国产精品123 | 超碰资源在线 | 国产美女诱惑 | 日韩av伦理 | 亚洲毛片a| 久草99 | 国产黄色大片免费看 | 午夜爱爱免费视频 | 亚洲a人 | 亚洲一区二区三区综合 | 91麻豆精品国产91久久久更新时间 | 国产精品日韩无码 | 中日韩精品视频在线观看 | 九七在线视频 | 国产一区二区不卡在线 | 中文字幕亚洲乱码熟女1区2区 | 殴美一级片 | 少妇久久久久久久久久 | 综合色区 | 美女隐私黄www网站动漫 | 91超级碰 | 19禁大尺度做爰无遮挡电影 | 国语对白做受xxxxx在线中国 | 亚洲私人网站 | 欧美日本亚洲韩国国产 | 扒开jk护士狂揉免费 | 欧美人体一区二区三区 | 天天干天天舔 | 欧美人体一区二区三区 | 波多野结衣视频在线观看 | 欧美日韩天堂 | 香蕉色视频| 草草影院在线 | 亚洲黄色在线观看 | 秋霞毛片少妇激情免费 | 欧美一页| 波多野结衣在线免费观看视频 | 亚洲超碰av | 伊人亚洲 |