?? mawsyncdlg.cpp
字號(hào):
// MAWSyncDlg.cpp : implementation file
//
/*
4線程之間的協(xié)同合作:
接受命令線程:負(fù)責(zé)接受PPC的發(fā)送命令
接受數(shù)據(jù)線程:負(fù)責(zé)接受PPC的發(fā)送數(shù)據(jù)
發(fā)送數(shù)據(jù)線程:根據(jù)PPC的命令來(lái)發(fā)送不同的數(shù)據(jù)流
發(fā)送命令線程:向PPC發(fā)送命令來(lái)控制PPC處理數(shù)據(jù)
==========================================================================================
接受命令線程----RecCommandThread(PVOID pParam)
接受PPC通過紅外發(fā)送來(lái)的命令
while(1)
{
if(g_bReccommand)
{
switch(g_iReccommand)
{
case 1://數(shù)據(jù)備份 PPC-->PC
//通過發(fā)送命令線程 向PPC發(fā)出指令!將data文件夾下的所有數(shù)據(jù)都備份過來(lái)
g_bBackup = true;
g_bRecCommand = false; //變成數(shù)據(jù)傳送模式
case 2://數(shù)據(jù)更新 PC-->PPC
//PC端程序選擇更新文件(股票?)
g_bUpdate = true;
g_bSendCommand = false ;
case 3://備用
}
}
}
==========================================================================================
接受數(shù)據(jù)線程----RecDataThread(PVOID pParam)
接受PPC通過紅外發(fā)送來(lái)的數(shù)據(jù)
while(1)
{
if(!g_bReccommand) //不是接受命令模式
{
for(int i=0;i<MAX;i++)
{
Rec(file);
file.save;
}
}
}
==========================================================================================
發(fā)送數(shù)據(jù)線程----SendDataThread(PVOID pParam)
向PPC通過紅外發(fā)送數(shù)據(jù)
while(1)
{
if(!g_bSendCommand) //不是發(fā)送命令模式
{
g_bSendCommand = true;
g_iSendCommand = 1;
g_bSendCommand = false;
CFileDialog.....
Choose(filename);
Send(filename);
//傳送完畢,發(fā)送一個(gè)命令
g_bSendCommand = true;
g_iSendCommand = 2;
}
}
==========================================================================================
發(fā)送命令線程----SendCommandThread(PVOID pParam)
向PPC通過紅外發(fā)送數(shù)據(jù)
while(1)
{
if(g_bSendCommand) //發(fā)送命令模式
{
switch(g_iSendCommand)
{
case 1:
Send("Begin");
case 2:
Send("End");
case 3:
}
}
}
==========================================================================================
*/
#include "stdafx.h"
#include "MAWSync.h"
#include "MAWSyncDlg.h"
#pragma comment(lib,"WS2_32.lib")
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
//=====================================================================================]
DWORD g_dwRDThreadID;
HANDLE g_hRDThread;
DWORD g_dwSDThreadID;
HANDLE g_hSDThread;
DWORD g_dwRCThreadID;
HANDLE g_hRCThread;
DWORD g_dwSCThreadID;
HANDLE g_hSCThread;
DWORD WINAPI RecCommandThread(PVOID pParam);
DWORD WINAPI SendDataThread(PVOID pParam);
DWORD WINAPI SendCommandThread(PVOID pParam);
/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About
SOCKET g_serverSocket;
SOCKET g_clientSocket;
BOOL g_bWaitForMessage;
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// Dialog Data
//{{AFX_DATA(CAboutDlg)
enum { IDD = IDD_ABOUTBOX };
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CAboutDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// ImplementationS
protected:
//{{AFX_MSG(CAboutDlg)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
// No message handlers
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMAWSyncDlg dialog
CMAWSyncDlg::CMAWSyncDlg(CWnd* pParent /*=NULL*/)
: CDialog(CMAWSyncDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CMAWSyncDlg)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMAWSyncDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CMAWSyncDlg)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CMAWSyncDlg, CDialog)
//{{AFX_MSG_MAP(CMAWSyncDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BTNCLOSE, OnBtnclose)
ON_BN_CLICKED(IDC_BTNSERVER, OnBtnserver)
ON_BN_CLICKED(IDC_BTNHELP, OnBtnhelp)
ON_WM_DESTROY()
ON_BN_CLICKED(IDC_BTNSERVER_RECOVER, OnBtnserverRecover)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CMAWSyncDlg message handlers
BOOL CMAWSyncDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
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);
}
}
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_bOpen = false;
WSADATA wsaData;
VERIFY(WSAStartup(MAKEWORD(1,1), &wsaData) == 0);
// g_hRCThread = CreateThread(NULL,0,RecCommandThread,(PVOID)this,0,&g_dwRCThreadID);
// g_hSCThread = CreateThread(NULL,0,SendCommandThread,(PVOID)this,0,&g_dwSCThreadID);
// g_hSDThread = CreateThread(NULL,0,SendDataThread,(PVOID)this,0,&g_dwSDThreadID);
return TRUE; // return TRUE unless you set the focus to a control
}
void CMAWSyncDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CMAWSyncDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
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;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CMAWSyncDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CMAWSyncDlg::OnBtnclose()
{
CDialog::OnCancel();
}
void CMAWSyncDlg::OnBtnserver()
{
if(m_bOpen)
{
AfxMessageBox("關(guān)閉服務(wù)!");
TerminateThread(g_hRDThread,0x110);
SetDlgItemText(IDC_BTNSERVER,"開啟服務(wù)");
SetDlgItemText(IDC_STATIC_BACKUPSTATUS,"服務(wù)未啟動(dòng)");
}
else
{
AfxMessageBox("開啟服務(wù)!");
g_hRDThread = CreateThread(NULL,0,RecDataThread,(PVOID)this,0,&g_dwRDThreadID);
SetDlgItemText(IDC_STATIC_BACKUPSTATUS,"服務(wù)已啟動(dòng)");
SetDlgItemText(IDC_BTNSERVER,"關(guān)閉服務(wù)");
}
m_bOpen = !m_bOpen;
}
void CMAWSyncDlg::OnBtnhelp()
{
AfxMessageBox("這里是幫助!");
}
DWORD WINAPI RecDataThread(PVOID pParam)
{
// Create the server socket
g_serverSocket = socket(AF_IRDA, SOCK_STREAM, 0);
if (g_serverSocket == INVALID_SOCKET)
{
return 1;
}
// Associate the server service with the socket
SOCKADDR_IRDA serverSocketAddr = { AF_IRDA, 0, 0, 0, 0, "MoneyAnyWhereIrDAService" };
if (bind(g_serverSocket, reinterpret_cast<struct sockaddr*>(&serverSocketAddr),
sizeof(serverSocketAddr)) == SOCKET_ERROR)
{
closesocket(g_serverSocket);
return 2;
}
// Listen for an incoming connection
if (listen(g_serverSocket, 1) == SOCKET_ERROR)
{
closesocket(g_serverSocket);
return 3;
}
g_bWaitForMessage = TRUE;
while(1)
{
g_clientSocket = accept(g_serverSocket, 0, 0);
if (g_bWaitForMessage == FALSE && g_clientSocket == INVALID_SOCKET)
{
break;
}
else if (g_clientSocket == INVALID_SOCKET)
{
continue;
}
int ulSize =1024;
if (ulSize > 0)
{
LPSTR pszMessage = new CHAR[ulSize + 1];
int nResult = recv(g_clientSocket, pszMessage, ulSize, 0);
AfxMessageBox(pszMessage);
if (g_bWaitForMessage == FALSE )
{
delete [] pszMessage;
break;
}
CFile file("test.ini", CFile::modeCreate | CFile::modeWrite );
WCHAR * pmessage = new WCHAR[1024*2];
MultiByteToWideChar(CP_THREAD_ACP,0,pszMessage,-1,pmessage,1024);
file.Write(pmessage,1024);
delete [] pszMessage;
delete [] pmessage;
}
}
return 0;
}
DWORD WINAPI RecCommandThread(PVOID pParam)
{
//掛起接受數(shù)據(jù)線程
::SuspendThread(g_hRDThread);
//別忘了把他喊醒......
::ResumeThread(g_hRDThread);
return 0;
}
DWORD WINAPI SendCommandThread(PVOID pParam)
{
//掛起發(fā)送數(shù)據(jù)線程
::SuspendThread(g_hSDThread);
//別忘了把他喊醒......
::ResumeThread(g_hSDThread);
return 0;
}
DWORD WINAPI SendDataThread(PVOID pParam)
{
return 0;
}
void CMAWSyncDlg::OnDestroy()
{
CDialog::OnDestroy();
WSACleanup();
closesocket(g_clientSocket);
}
void CMAWSyncDlg::OnBtnserverRecover()
{
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -