滴水逆向—多线程抢红包—临界区篇,简单易懂

滴水逆向—多线程抢红包—临界区篇,简单易懂
临界区:
// 互斥体实战.cpp : Defines the entry point for the application.
//
在这里插入图片描述

#include “stdafx.h”
#include <WINDOWS.H>
#include <stdio.h>
#include “resource.h”

HWND hEdit1,hEdit2,hEdit3,hEdit4;
CRITICAL_SECTION cs;

DWORD WINAPI GetMoney1(LPVOID lpParameter)
{
TCHAR szBuffer[10];
TCHAR szBuffer2[10];
DWORD Money=0; 从EDIT1当中通过GetWindowText()获取到的红包金额
DWORD dwMoney=0; 当前线程金额
BOOL flag=TRUE;
while(flag)
{
EnterCriticalSection(&cs);
GetWindowText(hEdit2,szBuffer,10);
GetWindowText(hEdit1,szBuffer2,10);
sscanf(szBuffer,"%d",&dwMoney);
sscanf(szBuffer2,"%d",&Money);
if(Money!=0) //红包金额
{
memset(szBuffer,0,10);
memset(szBuffer2,0,10);
sprintf(szBuffer,"%d",++dwMoney);
sprintf(szBuffer2,"%d",–Money);
SetWindowText(hEdit2,szBuffer);
SetWindowText(hEdit1,szBuffer2);
}
else
{
flag=FALSE;
}
LeaveCriticalSection(&cs);
Sleep(50);

}
return 0;

}
DWORD WINAPI GetMoney2(LPVOID lpParameter)
{
TCHAR szBuffer[10];
TCHAR szBuffer2[10];
DWORD Money=0;
DWORD dwMoney=0;
BOOL flag=TRUE;
while(flag)
{
EnterCriticalSection(&cs);
GetWindowText(hEdit3,szBuffer,10);
GetWindowText(hEdit1,szBuffer2,10);
sscanf(szBuffer,"%d",&dwMoney);
sscanf(szBuffer2,"%d",&Money);
if(Money!=0)
{
memset(szBuffer,0,10);
memset(szBuffer2,0,10);
sprintf(szBuffer,"%d",++dwMoney);
sprintf(szBuffer2,"%d",–Money);
SetWindowText(hEdit3,szBuffer);
SetWindowText(hEdit1,szBuffer2);
}else
{
flag=FALSE;
}
LeaveCriticalSection(&cs);
Sleep(50);

}
return 0;

}
DWORD WINAPI GetMoney3(LPVOID lpParameter)
{
TCHAR szBuffer[10];
TCHAR szBuffer2[10];
DWORD Money=0;
DWORD dwMoney=0;
BOOL flag=TRUE;
while(flag)
{
EnterCriticalSection(&cs);
GetWindowText(hEdit4,szBuffer,10);
GetWindowText(hEdit1,szBuffer2,10);
sscanf(szBuffer,"%d",&dwMoney);
sscanf(szBuffer2,"%d",&Money);
if(Money!=0)
{
memset(szBuffer,0,10);
memset(szBuffer2,0,10);
sprintf(szBuffer,"%d",++dwMoney);
sprintf(szBuffer2,"%d",–Money);
SetWindowText(hEdit4,szBuffer);
SetWindowText(hEdit1,szBuffer2);
}
else
{
flag =FALSE;
}
LeaveCriticalSection(&cs);
Sleep(50);

}
return 0;

}

DWORD WINAPI ThreadProc1(LPVOID lpParameter)
{
HANDLE hThreads[3];
hThreads[0]= CreateThread(NULL,0,GetMoney1,NULL,NULL,NULL);
hThreads[1]=CreateThread(NULL,0,GetMoney2,NULL,NULL,NULL);
hThreads[2]=CreateThread(NULL,0,GetMoney3,NULL,NULL,NULL);
//HANDLE hThread2 = CreateThread(NULL,0,GetMoney2,NULL,NULL,NULL);
// HANDLE hThread3 = CreateThread(NULL,0,GetMoney3,NULL,NULL,NULL);
WaitForMultipleObjects(3,hThreads,TRUE,INFINITE);
//些自己用来释放资源的代码
CloseHandle(hThreads[0]);
CloseHandle(hThreads[1]);
CloseHandle(hThreads[2]);
return 0;
}

BOOL CALLBACK MainDlgProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
switch(uMsg)
{
case WM_CLOSE:
EndDialog(hDlg,0);
return TRUE;
case WM_INITDIALOG:
{
hEdit1 = GetDlgItem(hDlg,IDC_EDIT1);
hEdit2 = GetDlgItem(hDlg,IDC_EDIT2);
hEdit3 = GetDlgItem(hDlg,IDC_EDIT3);
hEdit4 = GetDlgItem(hDlg,IDC_EDIT4);
SetWindowText(hEdit1,“0”);
SetWindowText(hEdit2,“0”);
SetWindowText(hEdit3,“0”);
SetWindowText(hEdit4,“0”);
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_BUTTON1:
{
TCHAR szBuff[10];
memset(szBuff,0,10);
GetWindowText(hEdit1,szBuff,10);
SetWindowText(hEdit1,szBuff);
SetWindowText(hEdit2,“0”);
SetWindowText(hEdit3,“0”);
SetWindowText(hEdit4,“0”);
CreateThread(NULL,0,ThreadProc1,NULL,NULL,NULL);
//WaitForSingleObject(hThread,INFINITE);
return TRUE;
}
}
break;
}
return 0;
}

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
InitializeCriticalSection(&cs);
DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG_MAIN),NULL,MainDlgProc);
return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值