전체 글
-
Microsoft Wireless Mobile Mouse 3500 신묘년 스페셜 에디션사용기 2011. 1. 28. 10:47
원래 노트북에서 사용하던 마우스의 휠이 고장나 바꾸기로 결심했고 이왕이면 무선 마우스로 바꿔보자 생각하여 검색하던중 아주 마음에 드는 마우스를 발견했다. 마우스를 선정한 기준은 1. 크기가 그리 크지 않을것. 노트북에 사용할 것이기 때문에 너무 크면 오히려 번거로울수 있기때문에. 2. 수신기는 초소형일것 주위에 무선마우스를 사용하는 지인들중 몇몇이 이 초소형 수신기 인데 수신기를 사용할때마다 빼었다 끼었다 하는게 아니라 그냥 계속 노트북에 꽂아 놓은체 사용할 수 있어 번거롭지 않고 분실의 위험이 적다. 3. 배터리가 오래 갈 것 너무 자주 배터리를 갈아야 한다면 무선 마우스가 오히려 독이 되므로 가장 배터리타임이 오래가는 것을 위주로 골랐다. 4. 어느 지면에서도 잘작동하고 인식범위가 5미터이상이어야한다..
-
종료Operations Dev/Producer 2010. 12. 11. 01:39
이서비스는 쓰레드로 만들었습니다. 그리고 윈도우는 메인함수에서 메인쓰레드라는게 존재한다. 그리고 각각 동작한다. 그리고 아까이야기 했듯이 클래스단위로 쓰레드화 하는게 아니고 하나의 컨숨?한 쓰레드가 됩니다. 이 프로듀서를 어디서 생성을 할까요->메인에서 생성할겁니다. 끄려면 강제종료를 시켜야하는데 그러면 메인이 종료됩니다. 그러면서 자식쓰레드들도 종료가됩니다. 그럼 소멸자가 어디서 불릴까? ->메인스레드 서비스함수들은 어디서 돌아가고 있을까? -> 각각 자기스레드 그럼 소멸자가 호출되는 순간 그 스레드들은 돌고있을까 안돌고있을까? -> 돌고있고 소멸자가 호출되도 돌리려고 시도 할 수 있다. -> 그러면 터진다 해결책 플래그변수를 불러요 -> Customer에 boolean변수 isEnd를 만든다 vola..
-
생산자 / 소비자Operations Dev 2010. 12. 11. 01:37
메인함수에서 소비자와 생산자의 쓰레드가 만들어지도록 호출하고 처리후 메인쓰레드가 종료될때 소멸자가 호출되는데 이 호출되는 순간에도 각자 자신의 쓰레드가 종료되지않고 돌고 있기 때문이다. 해결책은 메인쓰레드가 종료될때 소멸자가 호출되는것을 이용하여 소멸자가 호출되었을대 모든 자식 스레드를 종료할때까지 기다린다. 그다음 메인스레드가 종료되게하면 문제가 해결된다. ::WaitForSingleObject( ( HANDLE )( _thread ), INFINITE); 또한 이 생산자/소비자의 문제에서는 멀티코어에서 생길수 있는 동일 메모리공유 문제에 대해서는 volatile boolean변수로 플래그를 만들어 해결한다. 그러나 이경우에도 생산자와 소비자 서로의 쓰레드가 다르므로 터질가능성이 있다. 이경우에는 소멸..
-
Producer / CustomerOperations Dev/Producer 2010. 12. 10. 23:45
Producer.h #pragma once #include #include #include "Concurrency\Thread.h" #include "Customer.h" #include "Concurrency\Timer.h" #include "Concurrency\SpinLock.h" class Producer { public: Producer(float frequency); ~Producer(); public: void beginService(); bool tryPop( std::string * product); private: void service(); private: Thread * _thread; std::queue _products;//경쟁관계에 있는 녀석 Time..
-
자체 뮤텍스락 이용Operations Dev/Concurrency 2010. 12. 10. 22:09
// Test1.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include #include #include #include using namespace std; #include "Concurrency/Thread.h" #include "Concurrency/MutexLock.h" //이거 연결은 정적 라이브러리 연결 동적이 나올수도 있음 string g_buffer; MutexLock g_lock; //1000번 찍는데 락을 걸어주기 위해서 우리가 만든 락 클래스를 이용한다. int _tmain(int argc, _TCHAR* argv[]) { vectorthreads; //힙을 이용하면 new를 이용하면 생성하고 delete를 하면 우리가 생성 ..
-
자체 스핀락 이용Operations Dev/Concurrency 2010. 12. 10. 22:08
// Test.cpp : 콘솔 응용 프로그램에 대한 진입점을 정의합니다. // #include "stdafx.h" #include #include #include #include using namespace std; #include "Concurrency/Thread.h" #include "Concurrency/SpinLock.h" //이거 연결은 정적 라이브러리 연결 동적이 나올수도 있음 string g_buffer; SpinLock g_lock; //1000번 찍는데 락을 걸어주기 위해서 우리가 만든 락 클래스를 이용한다. int _tmain(int argc, _TCHAR* argv[]) { vectorthreads; //힙을 이용하면 new를 이용하면 생성하고 delete를 하면 우리가 생성 소멸 ..
-
ConcurrencyOperations Dev/Concurrency 2010. 12. 10. 22:07
-----Thread.h #pragma once #include //Rari? 리소스를 얻으면 바로 초기화한다.보통 윈도 api를 사용한다. 독립적으로 되려면 매기기 마다 컴파일해야한다. ios로 가면 ios api를 써야한다. class Thread { public: Thread( std::function const & threadFunc );//스레드를 만들 함수를 넘기다. 리턴타입없고 인자도없다. ~Thread(); public: unsigned int getThreadId() const; unsigned int getThreadHandle() const; private: Thread( Thread const & value ){} Thread & operator=( Thread ..
-
식사하는 철학자Operations Dev/Food 2010. 12. 10. 21:22
// Chapter06.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include #include #include #include using namespace std; int const MAX_FORK = 5; int const MAX_PHILOSOPHER = 5; HANDLE g_forks[ MAX_FORK ]; HANDLE g_room; void eat( string const & philosopher ); void think( string const & philosopher ); unsigned int WINAPI startDinner( LPVOID param ); int _tmain(int ar..