'Operations Dev/Handle'에 해당되는 글 2건

  1. 2010.12.10 HandleBased Operation System
  2. 2010.12.10 map과 make_pair
posted by Kyleslab 2010. 12. 10. 17:43

-- Process.h
#pragma once

#include <string>

class Process
{
public:
 Process(std::string const & name);

public:
 void excute(std::string const & message);//const 변경하지말라! &빠르게 넘기겠다!

private:
 std::string _name;
};

-- Process.cpp
#include "stdafx.h"

#include <iostream>
using namespace std;

#include "Process.h"
Process::Process( std::string const & name)
 : _name( name )
{
}

void Process::excute(const std::string & message)//const 변경하지말라! &빠르게 넘기겠다!
{
 cout<<_name<<"executed"<<message<<endl;
}

--Operation System.h
#pragma once

#include <map>
#include <string>

class Process;

class OperatingSystem
{

public:
 OperatingSystem();
 ~OperatingSystem();
public:
 int createProcess(std::string const & processName);
 void sendMessage(int processHandle, std::string const & message);
public:
 void getHandle (std::string const & processName);
private:
 std::map<int, Process *> _table;
 std::map<std::string, int> _handeltable;

private:
 static int _HandleCouter;// 클래스안에서 하나만 생성된다 인스턴스를 아무리 많이 만들어도
};

--Operation.cpp
#include "stdafx.h"
#include "Process.h"
#include "OperatingSystem.h"

#include <iostream>
using namespace std;

int OperatingSystem::_HandleCouter =0;

OperatingSystem::OperatingSystem()
{

}
OperatingSystem::~OperatingSystem()
{
 auto iter = _table.begin();
 for(;iter != _table.end(); ++iter)
 {
  delete (*iter).second;
 }
 _table.clear();

 _handeltable.clear();
}
int OperatingSystem::createProcess(std::string const & processName)
{
 _table.insert( make_pair( OperatingSystem::_HandleCouter,new Process( processName)));

 _handeltable.insert( make_pair( processName, OperatingSystem::_HandleCouter));

 return OperatingSystem::_HandleCouter++;

}
void OperatingSystem::sendMessage(int processHandle, std::string const & message)
{
 auto iter = _table.find(processHandle);
 (*iter).second->excute( message);
}

void OperatingSystem::getHandle(std::string const & processName)
{

 auto iter = _handeltable.find(processName);
 cout<<processName<<"의 HandleCounter는 "<<(*iter).second<<"입니다."<<endl;

}

--HandleBased System.cpp
// HandleBasedSystem.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"

#include "OperatingSystem.h"

int _tmain(int argc, _TCHAR* argv[])
{
 OperatingSystem os;

 int p1Han1d = os.createProcess("Process1");
 int p2Han1d = os.createProcess("Process2");
 int p3Han1d = os.createProcess("Process3");
 
 os.sendMessage(p2Han1d, "running");
 os.sendMessage(p1Han1d, "eating");
 os.sendMessage(p2Han1d, "sleeping");

 os.getHandle("Process1");
 os.getHandle("Process2");
 os.getHandle("Process3");

 return 0;
}

 

'Operations Dev > Handle' 카테고리의 다른 글

map과 make_pair  (0) 2010.12.10
posted by Kyleslab 2010. 12. 10. 17:35


// Table.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다.
//

#include "stdafx.h"

#include <map>
#include <string>
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
 map<string, int> table;

 table["abc"] = 10;
 table.insert( make_pair("due",20));// pair 두개의 자료를 하나의 자료로 묶어준다.
 /*pair<int, int> a;
 a.first;
 a.second;
 */
 //map< string, int >::iterator iter;
 auto iter =table.begin();
 for(;
  iter !=table.end();
  ++iter )
 {
  cout<<(*iter).first<<(*iter).second<<endl;
 }

 cout<<table["abc"]<<endl;// 이방식은 거의 사용안함 안의 인덱스가 없는것들도 접근이 가능하므로 위험하다.

 iter = table.find("abc");
 cout<<(*iter).second<<endl;

 cout<<table["asdfasdf"]<<endl;

 return 0;
}

 

'Operations Dev > Handle' 카테고리의 다른 글

HandleBased Operation System  (0) 2010.12.10