📄
字号:
// BankNumCallDlg.cpp : implementation file
#include "stdafx.h"
#include "BankNumCall.h"
#include "BankNumCallDlg.h"
#include "windowsx.h"
#include "queue"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
HANDLE Serv_hMutex,CalNum_hMutex;
std::queue<int> Work_q;
int CalNum=0;
class CAboutDlg : public CDialog
{
public:
CAboutDlg(); //函数成员
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX);
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)//析构函数
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)//析构函数
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
BOOL CBankNumCallDlg::M_bt1=FALSE;
BOOL CBankNumCallDlg::M_bt2=FALSE;
BOOL CBankNumCallDlg::M_Ser1=FALSE;
BOOL CBankNumCallDlg::M_Ser2=FALSE;
BOOL CBankNumCallDlg::M_Ser3=FALSE;
CBankNumCallDlg::CBankNumCallDlg(CWnd* pParent /*=NULL*/)
: CDialog(CBankNumCallDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CBankNumCallDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CBankNumCallDlg, CDialog)
//{{AFX_MSG_MAP(CBankNumCallDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
ON_BN_CLICKED(IDC_BUTTON2, OnButton2)
ON_BN_CLICKED(IDC_BUTTON3, OnButton3)
ON_BN_CLICKED(IDC_BUTTON4, OnButton4)
ON_BN_CLICKED(IDC_BUTTON5, OnButton5)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL CBankNumCallDlg::OnInitDialog()
{
CDialog::OnInitDialog();
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
SetIcon(m_hIcon, TRUE);
SetIcon(m_hIcon, FALSE);
Serv_hMutex=CreateMutex(NULL,false,"ser");
CalNum_hMutex=CreateMutex(NULL,false,"cal");
R_PARAM *pR_Param=new R_PARAM;
pR_Param->hwnd=m_hWnd;
HANDLE hThread_1=CreateThread(NULL,0,ServWin1,(LPVOID)pR_Param,0,NULL);
CloseHandle(hThread_1);
HANDLE hThread_2=CreateThread(NULL,0,ServWin2,(LPVOID)pR_Param,0,NULL);
CloseHandle(hThread_2);
HANDLE hThread_3=CreateThread(NULL,0,ServWin3,(LPVOID)pR_Param,0,NULL);
CloseHandle(hThread_3);
HANDLE hThread_4=CreateThread(NULL,0,Caller1,(LPVOID)pR_Param,0,NULL);
CloseHandle(hThread_4);
HANDLE hThread_5=CreateThread(NULL,0,Caller2,(LPVOID)pR_Param,0,NULL);
CloseHandle(hThread_5);//线程
return TRUE;
}
void CBankNumCallDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
void CBankNumCallDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this);
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CBankNumCallDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CBankNumCallDlg::OnButton3()
{ CString str1="办理中";
CString str2="暂停";
M_Ser1=!M_Ser1;
M_Ser1?::SetDlgItemText(m_hWnd,IDC_BUTTON3,str1): ::SetDlgItemText(m_hWnd,IDC_BUTTON3,str2);
}
void CBankNumCallDlg::OnButton4()
{ CString str1="办理中";
CString str2="暂停";
M_Ser2=!M_Ser2;
M_Ser2?::SetDlgItemText(m_hWnd,IDC_BUTTON4,str1): ::SetDlgItemText(m_hWnd,IDC_BUTTON4,str2);
}
void CBankNumCallDlg::OnButton5()
{ CString str1="办理中";
CString str2="暂停";
M_Ser3=!M_Ser3;
M_Ser3?::SetDlgItemText(m_hWnd,IDC_BUTTON5,str1): ::SetDlgItemText(m_hWnd,IDC_BUTTON5,str2);
}
DWORD WINAPI CBankNumCallDlg::ServWin1( LPVOID lpParameter)
{CString str;
CString str1="稍候";
HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
while(TRUE){
if(M_Ser1)
::SetDlgItemText(hwnd,IDC_EDIT1,str1);
else{
WaitForSingleObject(Serv_hMutex,INFINITE);
if(Work_q.size()!=0){
str.Format("%d",Work_q.front());
Work_q.pop();
::SetDlgItemText(hwnd,IDC_EDIT1,str);
}
ReleaseMutex(Serv_hMutex);
}
Sleep(1000);
}
return 0;
}
DWORD WINAPI CBankNumCallDlg::ServWin2( LPVOID lpParameter)
{CString str;
CString str1="稍候";
HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
while(TRUE){
if(M_Ser2)
::SetDlgItemText(hwnd,IDC_EDIT2,str1);
else{
WaitForSingleObject(Serv_hMutex,INFINITE);
if(Work_q.size()!=0){
str.Format("%d",Work_q.front());
Work_q.pop();
::SetDlgItemText(hwnd,IDC_EDIT2,str);
}
ReleaseMutex(Serv_hMutex);
}
Sleep(2000);
}
return 0;
}
DWORD WINAPI CBankNumCallDlg::ServWin3( LPVOID lpParameter)
{CString str;
CString str1="稍候";
HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
while(TRUE){
if(M_Ser3)
::SetDlgItemText(hwnd,IDC_EDIT3,str1);
else{
WaitForSingleObject(Serv_hMutex,INFINITE);
if(Work_q.size()!=0){
str.Format("%d",Work_q.front());
Work_q.pop();
::SetDlgItemText(hwnd,IDC_EDIT3,str);
}
ReleaseMutex(Serv_hMutex);
}
Sleep(3000);
}
return 0;
}
DWORD WINAPI CBankNumCallDlg::Caller1( LPVOID lpParameter)
{ CString str;
while(TRUE)
{
if(M_bt1)
{ HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
str="";
::SetDlgItemText(hwnd,IDC_EDIT5,str);
WaitForSingleObject(CalNum_hMutex,INFINITE);
CalNum++;
str.Format("%d",CalNum);
Work_q.push(CalNum);
M_bt1=FALSE;
::SetDlgItemText(hwnd,IDC_EDIT4,str);
str.Format("%d",Work_q.size());
::SetDlgItemText(hwnd,IDC_EDIT6,str);
ReleaseMutex(CalNum_hMutex);
}
Sleep(50);
}
return 0;
}
DWORD WINAPI CBankNumCallDlg::Caller2( LPVOID lpParameter)
{ CString str;
while(TRUE)
{
if(M_bt2)
{ HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
str="";
::SetDlgItemText(hwnd,IDC_EDIT4,str);
WaitForSingleObject(CalNum_hMutex,INFINITE);
CalNum++;
str.Format("%d",CalNum);
Work_q.push(CalNum);
M_bt2=FALSE;
// HWND hwnd=((R_PARAM*)lpParameter)->hwnd;
::SetDlgItemText(hwnd,IDC_EDIT5,str);
str.Format("%d",Work_q.size());
::SetDlgItemText(hwnd,IDC_EDIT6,str);
ReleaseMutex(CalNum_hMutex);
}
Sleep(50);
}
return 0;
}
void CBankNumCallDlg::OnButton1()
{
// TODO: Add your control notification handler code here
M_bt1=TRUE;
}
void CBankNumCallDlg::OnButton2()
{
// TODO: Add your control notification handler code here
M_bt2=TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -