zoukankan      html  css  js  c++  java
  • 线程文件[MFC]线程优先级设置,下拉列表框ComboBox,复选框CButton,列表框CListBox的使用

    发一下牢骚和主题无关:

        #include "CountThread.h" #include "DisplayThread.h" BEGIN_MESSAGE_MAP(CCountTestThreadMFCDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_CBN_SELCHANGE(IDC_COMBO1, &CCountTestThreadMFCDlg::OnCbnSelchangeCombo1) ON_CBN_SELCHANGE(IDC_COMBO2, &CCountTestThreadMFCDlg::OnCbnSelchangeCombo2) ON_CBN_SELCHANGE(IDC_COMBO3, &CCountTestThreadMFCDlg::OnCbnSelchangeCombo3) ON_BN_CLICKED(IDC_CHECK3, &CCountTestThreadMFCDlg::OnBnClickedCheck3) END_MESSAGE_MAP() BOOL CCountTestThreadMFCDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”单菜项添加到统系单菜中。 // IDM_ABOUTBOX 必须在统系命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 置设此对话框的标图。当应用程序主窗口不是对话框时,框架将动自 // 执行此操纵 SetIcon(m_hIcon, TRUE); // 置设大标图 SetIcon(m_hIcon, FALSE); // 置设小标图 // TODO: 在此添加外额的初始化代码 //定义的成员变量 // CString mStrNamber;//线程所要操纵的资源对象 // CMutex* mMutex;//用于步同制机的互斥量 // CWinThread* m_pCounterThread;//指向计数线程的指针 // CWinThread* m_pDisplayThread;//指向表现线程的指针 CComboBox* pBox; pBox=(CComboBox*)GetDlgItem(IDC_COMBO1); ASSERT(pBox != NULL); if (pBox != NULL) { pBox->AddString(L"Idle"); pBox->AddString(L"Normal"); pBox->AddString(L"High"); pBox->AddString(L"Realtime"); pBox->SetCurSel(1); } pBox=(CComboBox*)GetDlgItem(IDC_COMBO2); ASSERT(pBox != NULL); if (pBox != NULL) { pBox->AddString(L"Idle"); pBox->AddString(L"Lowest"); pBox->AddString(L"BelowNormal"); pBox->AddString(L"Normal"); pBox->AddString(L"AboveNormal"); pBox->AddString(L"Highest"); pBox->AddString(L"Timecritical"); pBox->SetCurSel(3); } pBox=(CComboBox*)GetDlgItem(IDC_COMBO3); ASSERT(pBox != NULL); if (pBox != NULL) { pBox->AddString(L"Idle"); pBox->AddString(L"Lowest"); pBox->AddString(L"BelowNormal"); pBox->AddString(L"Normal"); pBox->AddString(L"AboveNormal"); pBox->AddString(L"Highest"); pBox->AddString(L"Timecritical"); pBox->SetCurSel(3); } //初始化挂起复选框为挂起状态 CButton* pBtn=(CButton*)GetDlgItem(IDC_CHECK3); pBtn->SetCheck(1); mStrNamber="0"; mMutex=new CMutex(FALSE,NULL,NULL); //初始化线程 CCountThread* pCountThread=new CCountThread; pCountThread->SetOwner(this); m_pCounterThread=pCountThread->myCreateThread(); CDisplayThread* pDisplayThread=new CDisplayThread; pDisplayThread->SetOwner(this); m_pDisplayThread=pDisplayThread->myCreateThread(); return TRUE; // 除非将核心置设到控件,否则回返 TRUE } void CCountTestThreadMFCDlg::OnPriorityChange(UINT nID) { ASSERT(nID == IDC_COMBO2 || nID == IDC_COMBO3); CComboBox* pBox=(CComboBox*)GetDlgItem(nID); int nCurSel=pBox->GetCurSel(); DWORD dw; switch (nCurSel)//任务线程的优先级有以下7种 { case 0:dw=THREAD_PRIORITY_IDLE;break; case 1:dw=THREAD_PRIORITY_LOWEST;break; case 2:dw=THREAD_PRIORITY_BELOW_NORMAL;break; case 3: default: dw=THREAD_PRIORITY_NORMAL;break; case 4:dw=THREAD_PRIORITY_ABOVE_NORMAL;break; case 5:dw=THREAD_PRIORITY_HIGHEST;break; case 6:dw=THREAD_PRIORITY_TIME_CRITICAL;break; } if (nID == IDC_COMBO2) { m_pCounterThread->SetThreadPriority(dw);//整调计数线程优先级 } else { m_pDisplayThread->SetThreadPriority(dw);//整调表现线程优先级 } } //进程优先级下拉框项选已改更事件 void CCountTestThreadMFCDlg::OnCbnSelchangeCombo1() { CComboBox* pBox=(CComboBox*)GetDlgItem(IDC_COMBO1); int nCurSel=pBox->GetCurSel(); DWORD dw; switch (nCurSel)//面界线程的优先级有以下4种 { case 0: dw=IDLE_PRIORITY_CLASS;break; case 1: default: dw=NORMAL_PRIORITY_CLASS;break; case 2: dw=HIGH_PRIORITY_CLASS;break; case 3: dw=REALTIME_PRIORITY_CLASS;break; } SetPriorityClass(GetCurrentProcess(),dw);//置设进程的优先级 } //计数线程下拉框项选已改更事件 void CCountTestThreadMFCDlg::OnCbnSelchangeCombo2() { OnPriorityChange(IDC_COMBO2); } //表现线程下拉框项选已改更事件 void CCountTestThreadMFCDlg::OnCbnSelchangeCombo3() { OnPriorityChange(IDC_COMBO3); } //挂起复选框单击事件 void CCountTestThreadMFCDlg::OnBnClickedCheck3() { CButton* pBtn=(CButton*)GetDlgItem(IDC_CHECK3); int state=pBtn->GetCheck(); if (state == 1)//要为改挂起 { m_pCounterThread->SuspendThread(); m_pDisplayThread->SuspendThread(); } else { m_pCounterThread->ResumeThread(); m_pDisplayThread->ResumeThread(); } } //向列表框中添加表现信息 void CCountTestThreadMFCDlg::AddToListBox(LPCTSTR szBuffer) { CListBox* pListBox=(CListBox*)GetDlgItem(IDC_LIST_DATA); ASSERT(pListBox != NULL); if (pListBox != NULL) { int x=pListBox->AddString(szBuffer); pListBox->SetCurSel(x); if (pListBox->GetCount()>15) { pListBox->DeleteString(0); } } }

        每日一道理
    青春,有嬉笑声与哭泣声夹杂的年华,青春的少年是蓝天中翱翔的幼鹰,虽然没有完全长大,有些稚气,有些懵懂,脱不开父母的双手却极力想去找寻属于自己的一片天空,为的是一时的激情,为的是一种独自翱翔的感觉!

        //BasicClass.h 文件 #pragma once #include "CountTestThreadMFCDlg.h" class CCountTestThreadMFCDlg; class BasicClass { public: BasicClass(void); virtual ~BasicClass(void); CCountTestThreadMFCDlg* mpCountTestThreadDlg; void SetOwner(CCountTestThreadMFCDlg* Owner); };

        //BasicClass.cpp 文件 #include "StdAfx.h" #include "BasicClass.h" BasicClass::BasicClass(void) { mpCountTestThreadDlg=NULL; } BasicClass::~BasicClass(void) { } void BasicClass::SetOwner(CCountTestThreadMFCDlg* Owner) { mpCountTestThreadDlg=Owner; }

        //CCountThread.h 文件 #pragma once #include "BasicClass.h" class CCountThread : public BasicClass { public: CCountThread(void); virtual ~CCountThread(void); CWinThread* myCreateThread();//建创线程计数 friend UINT AddOne(LPVOID pParam);//加1计数 };

        //CCountThread.h 文件 #include "StdAfx.h" #include "CountThread.h" CCountThread::CCountThread(void) { } CCountThread::~CCountThread(void) { } CWinThread* CCountThread::myCreateThread() { return AfxBeginThread(AddOne,(LPVOID)mpCountTestThreadDlg,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED); } UINT AddOne(LPVOID pParam) { CCountTestThreadMFCDlg* mpCountTestThreadMFCDlg=(CCountTestThreadMFCDlg*)pParam; if (mpCountTestThreadMFCDlg == NULL) { return -1; } BOOL fSyncChecked;//线程步同制机复选检测 unsigned int nNumber;//存储字符串中整数 CSingleLock singleLock(mpCountTestThreadMFCDlg->mMutex); while(true) { fSyncChecked=mpCountTestThreadMFCDlg->IsDlgButtonChecked(IDC_CHECK1); if (fSyncChecked) { singleLock.Lock(); } nNumber=_ttoi(mpCountTestThreadMFCDlg->mStrNamber); nNumber++; mpCountTestThreadMFCDlg->mStrNamber.Empty(); mpCountTestThreadMFCDlg->mStrNamber.Format(_T("%d"),nNumber); if (mpCountTestThreadMFCDlg->IsDlgButtonChecked(IDC_CHECK2)) { mpCountTestThreadMFCDlg->AddToListBox(_T("Counter:Add 1")); } Sleep(500); if (fSyncChecked) { singleLock.Unlock(); } } mpCountTestThreadMFCDlg->PostMessageW(WM_CLOSE,0,0); return 0; }

        //DisplayThread.h文件 #pragma once #include "BasicClass.h" class CDisplayThread : public BasicClass { public: CDisplayThread(void); virtual ~CDisplayThread(void); CWinThread* myCreateThread(); friend UINT Display(LPVOID pParam); };

        //DisplayThread.cpp文件 #include "StdAfx.h" #include "DisplayThread.h" CDisplayThread::CDisplayThread(void) { } CDisplayThread::~CDisplayThread(void) { } CWinThread* CDisplayThread::myCreateThread() { return AfxBeginThread(Display,mpCountTestThreadDlg,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL); } UINT Display(LPVOID pParam) { CCountTestThreadMFCDlg* mpCounterThreadDlg=(CCountTestThreadMFCDlg*)pParam; ASSERT(mpCounterThreadDlg!=NULL); if (mpCounterThreadDlg == NULL) { return -1; } BOOL fSyncChecked; CString strBuffer; CSingleLock singleLock(mpCounterThreadDlg->mMutex); while (true) { fSyncChecked=mpCounterThreadDlg->IsDlgButtonChecked(IDC_CHECK1); if (fSyncChecked) { singleLock.Lock(); } strBuffer=_T("Display:"); strBuffer+= mpCounterThreadDlg->mStrNamber; mpCounterThreadDlg->AddToListBox(strBuffer); Sleep(1000); if (fSyncChecked) { singleLock.Unlock(); } } mpCounterThreadDlg->PostMessageW(WM_CLOSE,0,0); return 0; }

        5.行运结果

        线程和文件

    文章结束给大家分享下程序员的一些笑话语录: 自行车
    一个程序员骑着一个很漂亮的自行车到了公司,另一个程序员看到了他,问 到,“你是从哪搞到的这么漂亮的车的?”
    骑车的那个程序员说, “我刚从那边过来, 有一个漂亮的姑娘骑着这个车过来, 并停在我跟前,把衣服全脱了,然后对我说,‘你想要什么都可以’”。
    另一个程序员马上说到, “你绝对做了一个正确的选择, 因为那姑娘的衣服你 并不一定穿得了”。

  • 相关阅读:
    web自动化中的上传操作
    HTTP协议
    创建一个get测试
    下载安装
    unittest 介绍
    selenium常用操作
    video视频操作
    调用JavaScript
    下拉框操作
    弹窗操作
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3060130.html
Copyright © 2011-2022 走看看