?? nodesetdlg.cpp
字號:
// NodeSetDlg.cpp : implementation file
//
#include "stdafx.h"
#include "GlobalClass.h"
#include "SimSensor.h"
#include "MainFrm.h"
#include "SimSensorView.h"
#include "Node.h"
#include "Sink.h"
#include "Msg.h"
#include "MsgCenter.h"
#include "Draw.h"
#include "NodeSetDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
extern CMsgCenter MsgCenter;
extern CDraw Draw;
/////////////////////////////////////////////////////////////////////////////
// CNodeSetDlg dialog
CNodeSetDlg::CNodeSetDlg(CWnd* pParent /*=NULL*/)
: CDialog(CNodeSetDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CNodeSetDlg)
m_NodeNum = 100;
m_Radium = 100.0f;
m_NodeEnergy = 100.0;
//}}AFX_DATA_INIT
}
void CNodeSetDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNodeSetDlg)
DDX_Text(pDX, IDC_NODE_NUM, m_NodeNum);
DDX_Text(pDX, IDC_RADIUM, m_Radium);
DDX_Text(pDX, IDC_NODE_ENERGY, m_NodeEnergy);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNodeSetDlg, CDialog)
//{{AFX_MSG_MAP(CNodeSetDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNodeSetDlg message handlers
void CNodeSetDlg::OnOK()
{
// TODO: Add extra validation here
int i,j;
UpdateData (true);
g_Radium = m_Radium;
g_NodeNum = m_NodeNum;
g_NodeEnergy = m_NodeEnergy;
CSink::SinkEnd = FALSE;
CNode::NodeEnd = FALSE;
//動態申請二維數組保存各區間的傳感器
DYNAMIC_2D_ARRAY(MsgCenter.pNodeStrain,BONDERY + 1,9,CNodeStrain *);
DYNAMIC_2D_ARRAY(MsgCenter.Locked,BONDERY + 1,9,CRITICAL_SECTION);
for (i=0;i<=BONDERY;i++) {
for (j=0;j<=8;j++) {
MsgCenter.pNodeStrain[i][j]=NULL;
InitializeCriticalSection(&(MsgCenter.Locked[i][j]));
}
}
//創建Sink節點進程
CSink * NewSink = new CSink;
NewSink->SinkId = 0;
//把Sink節點插入到保存各區間傳感器的數組中的pNodeStrain[0][0]
MsgCenter.InsertNodeStrain( (CNode *)NewSink,0,0 );
AfxBeginThread(NewSink->SinkWorkProc, NewSink,THREAD_PRIORITY_NORMAL);
//創建Node節點進程
for (i=1;i<=(int(g_NodeNum/8)+1);i++) {
int Num=((i*8<=g_NodeNum)?8:g_NodeNum%8);
for (j=1;j<=Num;j++) {
CNode * NewNode = new CNode(m_NodeEnergy);
//產生隨機數(浮點數),位于區間[a,b]或者[b,a]
//double randDbl(double a,double b)
//{
// return a + static_cast<double>(rand())/RAND_MAX*(b-a);
//}
NewNode->Distance = (i-1)*g_Radium/(int(g_NodeNum/8)+1)+static_cast<double>(rand())/RAND_MAX*(g_Radium/(int(g_NodeNum/8)+1));
NewNode->Angle = (j-1)*PAI/4 + static_cast<double>(rand())/RAND_MAX*(PAI/4);
NewNode->NodeId = (i-1)*8+j;
//把Node節點插入到保存各區間傳感器的數組的pNodeStrain[0][1]傳感器鏈中
MsgCenter.InsertNodeStrain( NewNode,0,1 );
AfxBeginThread(NewNode->NodeWorkProc, NewNode,THREAD_PRIORITY_NORMAL);
//NewNode->hThread = CreateThread(NULL,0,NewNode->NodeWorkProc,(LPVOID)(&NewNode),0,NULL);
}
}
g_Num = 0;
//向Sink節點發送消息讓系統進入初始化過程
MsgCenter.SendMsg(0,0,-1,-1,50,NULL,-1);
g_NodeSet = true;
CSimSensorView *pView;
pView = (CSimSensorView *)((CMainFrame *)AfxGetApp()->m_pMainWnd)->GetActiveView();
CListCtrl &ListCtrl = pView->GetDocument()->pMsgListView->GetListCtrl();
ListCtrl.DeleteAllItems();
ASSERT(ListCtrl.GetItemCount() == 0);
pView->Invalidate ();
pView->OnDraw(pView->GetDC());
pView->ReleaseDC(pView->GetDC());
//Draw.DrawCoordinates(((CSimSensorView *)((CMainFrame *)AfxGetApp()->m_pMainWnd)->GetActiveView())->GetDC());
CDialog::OnOK();
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -