创建线程,互斥线程,非互斥线程及线程的结束
2010-12-04 22:07
204 查看
#include "afxmt.h" //线程函数 int data1=0; int data2=0; int data3=0; int data4=0; bool isTermiateThread=false;//结束线程使用 CCriticalSection CriticalSection;//使用线程互斥 UINT Thread_Add(LPVOID param)//加法线程函数 { isTermiateThread=false; while (++data1) { if (isTermiateThread)return 0; CString str; str.Format("%d",data1); CWnd *pWnd=AfxGetApp()->GetMainWnd(); pWnd->GetDlgItem(IDC_EDIT1)->SetWindowText(str); ::Sleep(10); } return 0; } UINT Thread_Sub(LPVOID param)//减法线程函数 { isTermiateThread=false; while (--data2) { if (isTermiateThread)return 0; CString str; str.Format("%d",data2); CWnd *pWnd=AfxGetApp()->GetMainWnd(); pWnd->GetDlgItem(IDC_EDIT2)->SetWindowText(str); ::Sleep(10); } return 0; } UINT Thread_Mutex1(LPVOID param) { isTermiateThread=false; while (1) { CriticalSection.Lock(); do { if (isTermiateThread)//当线程结束时此处需要解锁,否则再次启动时进程时不能访问资源 { CriticalSection.Unlock(); return 0; } CString str; str.Format("%d",data3++); CWnd *pWnd=AfxGetApp()->GetMainWnd(); pWnd->GetDlgItem(IDC_EDIT3)->SetWindowText(str); ::Sleep(100); }while (data3<100); CriticalSection.Unlock(); } return 0; } UINT Thread_Mutex2(LPVOID param) { isTermiateThread=false; while (1) { CriticalSection.Lock(); do { if (isTermiateThread)//当线程结束时此处需要解锁,否则再次启动时进程时不能访问资源 { CriticalSection.Unlock(); return 0; } CString str; str.Format("%d",data3--); CWnd *pWnd=AfxGetApp()->GetMainWnd(); pWnd->GetDlgItem(IDC_EDIT3)->SetWindowText(str); ::Sleep(100); }while (data3>0); CriticalSection.Unlock(); } return 0; } UINT Thread_NoMutex1(LPVOID param) { isTermiateThread=false; while (1) { do { if (isTermiateThread) return 0; CString str; str.Format("%d",data4++); CWnd *pWnd=AfxGetApp()->GetMainWnd(); pWnd->GetDlgItem(IDC_EDIT4)->SetWindowText(str); ::Sleep(10); }while (data4<100); } return 0; } UINT Thread_NoMutex2(LPVOID param) { isTermiateThread=false; while (1) { do { if (isTermiateThread)return 0; CString str; str.Format("%d",data4--); CWnd *pWnd=AfxGetApp()->GetMainWnd(); pWnd->GetDlgItem(IDC_EDIT4)->SetWindowText(str); ::Sleep(10); }while (data4>0); } return 0; } void CThreadDlg::OnBeginThread() //创建两个独立的线程 { // TODO: Add your control notification handler code here HWND hWnd=GetSafeHwnd(); AfxBeginThread(Thread_Add,hWnd); AfxBeginThread(Thread_Sub,hWnd); } void CThreadDlg::OnThreadMutex() //创建互斥线程 { // TODO: Add your control notification handler code here HWND hWnd=GetSafeHwnd(); AfxBeginThread(Thread_Mutex1,hWnd); AfxBeginThread(Thread_Mutex2,hWnd); } void CThreadDlg::OnNoThreadMutex() //创建两个互斥但相互受影响的线程 { // TODO: Add your control notification handler code here HWND hWnd=GetSafeHwnd(); AfxBeginThread(Thread_NoMutex1,hWnd); AfxBeginThread(Thread_NoMutex2,hWnd); } void CThreadDlg::OnEndThread() //结束线程 { // TODO: Add your control notification handler code here isTermiateThread=1; }
相关文章推荐
- 线程创建,属性设置与获得,等待线程结束,线程中fork,以及执行exec()
- 线程创建和结束理解
- Delphi 如何解决在DLL的入口函数中创建或结束线程时卡死
- 【Python】线程的创建、执行、互斥、同步、销毁
- Java基础学习总结(88)——线程创建与终止、互斥、通信、本地变量
- Java创建和结束线程
- linux 线程创建和结束
- vc 线程的创建,暂停和结束
- 在你的服务器端代码中使用线程和创建异步处理(结束)
- win32多线程 (一) 线程创建与结束等待
- 线程的创建、管理 与 使用信号灯、互斥量、临界区、事件进行线程同步或互斥
- 【IO进程】守护进程,线程创建、同步与互斥
- WIN32多线程一 用WIN32 API创建和结束线程(转)
- 线程的创建、等待、终止、分离、同步和互斥
- Java创建与结束线程代码示例
- 【C++】Windows线程的创建、执行、互斥、同步、销毁
- iOS 如何创建一个线程,要求可以一直工作,不会执行一次就结束
- 初识pthread(一)-线程管理之创建/结束线程
- 线程的基本操作,创建线程,结束线程,新线程跟原线程共享变量
- Java基础之多线程篇(线程创建与终止、互斥、通信、本地变量)