U E D R S I H C RSS
ID
Password
Join
살아가는것이 슬픈 생각이 든다. 당신도 그렇겠지만 슬퍼도 당신은 그에 버금가는 힘을 가졌으면 한다 --신경숙/'새야새야'에서

 * 일단 소스만 올려놓았습니다. 설명은 차근차근 토를 달도록 하죠.

//
// Task ~O Task ~B~^ ~T~D~@~A~P, ~T~D~@ ~T~_ ~A~^~X~J ~B~Z ~X~H| ~\
//
// Code by Redpixel
//

#include <conio.h>          // getch() ~U~L문~W~P ~O~U.
#include <iostream>         // cin, cout ~U~L문~W~P ~O~U.

// ACE Include~S...
#include "ace/Message_Block.h"
#include "ace/Task.h"
#include "ace/os.h"
#include "ace/Service_Config.h"
#include "ace/Synch.h"

using namespace std;

// ~E~L~J~J 문~^~P~W~^~E~K~H~K.
char testStr[256] = "Test문~^~P~W~^~E~K~H~K. ^^";

// Task ~A~^~X~J ~D| ~V
class TestTask : public ACE_Task<ACE_MT_SYNCH>
{
public:
    // ~]~C~]~D ~K~V~I~K~\~\~D~\ ~B~@| ~A~] ~S| ~H~S~\를 기~O~Y~K~\~B~K.
    int open(void *)
    {
        if (this->activate() == -1)
            ACE_ERROR ((LM_ERROR, "%p\n", "Task 기~O~Y!"));
        return 0;
    }
    // ~S| ~H~S~\~W~P~D~\ ~O~Y~^~Q~U|  ~B~Z~]~D ~B~X~C~@~B~K.
    int svc()
    {
            ACE_DEBUG ((LM_DEBUG, "(%t) MyTask ~K~\~O~Y!\n"));
        // ~]~M~J ~H~X ~@~H~X. ~T~D~@~W~P ~Y~W~D~\ ~K른 ~T~D~@~] ~C~]~D ~K~B~X~L ~U~X기 ~\~D~U.
        int i = 0;
        // 무~U~\ 루~T~D. ~[~P~^~X ~Q~D~W~P ~K~\그~D~P~]~D ~S~M~X ~@~H~X를 ~S~M~X ~H~T~L ~U~U~U~X~@~L
        // ~X~H| ~\~]~@~\ ~D~K~^~H ~U~X기~\~D~U ~C~]~^~U~X| ~K.
            while (true)
        {
            char tmpStr[255];
            ACE_OS::sprintf(tmpStr, "%d : %s", i, testStr);
            // ~^~D~K~\ ~T~D~@ ~T~_ ~O~]~D ~D| ~V ~[~D ~C~H~\~Z ~T~D~@ ~T~_~]~D ~U| ~K~U~\~K.
            // ~W기~W~P~J~T ~K~H~\~^~H 문~^~P~W ~U~X~B~X~L 공~D~]~D ~Y~U보~U~X~J~T ~C~\~\ ~U~\~K.
            ACE_Message_Block *mb = new ACE_Message_Block(ACE_OS::strlen(tmpStr)+1);
            // ~T~D~@ ~T~_~W~P 문~^~P~W~]~D 복~B~U~\~K.
            ACE_OS::strcpy(mb->wr_ptr(), tmpStr);
            // ~T~D~@ ~T~_~]~X ~S기 ~O~]~D를 ~R~\ 물| ~F~S~J~T~K.
            // ~W기~D~\~J~T ~U~D~Z~T~@ ~W~F~@~L, ~D~G~\~\ ~L~S기 ~\~D~U~D~\..^_^
            mb->wr_ptr(ACE_OS::strlen(tmpStr)+1);
            // ~A~P~W~P ~T~D~@ ~T~_~]~D ~D~J~T~K.
            putq(mb);
            // ~]~M~J ~H~^~P ~]~@.
            i++;
            // 1~H| ~U~O~D ~^| ~S| ~K. (~T~_!)
            ACE_OS::sleep(1);
        }
            ACE_DEBUG ((LM_DEBUG, "(%t) MyTask ~E~L!\n"));
            return 0 ;
    }
};

// ~T~] ~U~H~X~^~E~K~H~K.
int main(int argc, char* argv[])
{
    // Task ~]~J~D~J ~D| ~V. ~U~D~A ~S| ~H~S~\~@ ~O~Y~^~Q~U~X~@~J~T ~U~J~U~X~K.
    TestTask m_Task;
    // ~S| ~H~S~\ 기~O~Y! ~@~H~@~D Task~]~X ~B~^ ~T~D~@ ~A~P~W~P 문~^~P~W~S~] ~L~S~]기 ~K~\~^~Q~U~\~K!
    m_Task.open(0);
    // 무~U~\ 루~T~D
    while (true)
    {
        // ~[~]~D ~T~D~@ ~T~_ ~O~]~D. 주~]~X~U|  | ~P~]~@ ~T~D~@~]~X ~O~]~D~L ~V~J~T~K~J~T | ~P~]~K.
        // new ~U~X면 ~U~H~P~\~K!
        ACE_Message_Block *head = 0;
        // ~A~P~\~@~D ~T~D~@를 ~U~X~B~X ~[~J~T~K.
        m_Task.getq(head);
        // ~T~D~@ ~T~_~]~D ~X~]~L~@~D 주~Z ~[~Q~V ~]~V~B~K.
        // ~W기~D~\~J~T ~V~\~T ~T~D~@ ~U~X~B~X~L ~T~@~V~H~\~@~\ ~U~\~H~L ~H~X~V~I~U~X~L ~P~\~K.
        for (ACE_Message_Block *mb = head; mb != 0; mb = mb->cont())
        {
            // ~]기 ~O~]~D~W~P~D~\ ~U~X~B~X를 ~]~V~S~]~K.
            cout << mb->rd_ptr();
        }
        // ~[~]~@ ~T~D~@ ~T~_~]~D ~T모리 ~U| ~\~U~\~K. delete~U~X~@ ~U~J~J~T ~C~W~P 주~]~X~U~].
        head->release();
        // ~U~\ 문~^~P ~^~E| ~[|  ~K~]~L~\~\ ~D~X~V~D~K.
        char d;
        cin >> d;
        cin.clear();
        // ~^~E| ~U~\ ~@~^~P~@ q면 ~E~L.
        if (d == 'q') break;
    }

    return 0;
}

음...폰트에 색깔이 비주얼 어시스트 같네요 -- Anonymous 2005-06-03 01:36:11

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2010-10-28 12:42:52
Processing time 0.3608 sec