{"id":1152,"date":"2019-06-21T20:07:43","date_gmt":"2019-06-21T11:07:43","guid":{"rendered":"https:\/\/www.oji-koji.com\/?p=1152"},"modified":"2019-07-11T22:36:10","modified_gmt":"2019-07-11T13:36:10","slug":"%e3%83%9e%e3%83%ab%e3%83%81%e3%82%b9%e3%83%ac%e3%83%83%e3%83%89%e3%82%92%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8b%e5%9f%ba%e6%9c%ac%e3%82%af%e3%83%a9%e3%82%b9%e3%81%ae%e4%bd%9c%e6%88%90","status":"publish","type":"post","link":"https:\/\/www.oji-koji.com\/?p=1152","title":{"rendered":"\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u3092\u5b9f\u73fe\u3059\u308b\u57fa\u672c\u30af\u30e9\u30b9\u306e\u4f5c\u6210(2019\/07\/11\u66f4\u65b0)"},"content":{"rendered":"\n<p class=\"program_discription\">\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u96e3\u3057\u3044\u3068\u611f\u3058\u3066\u3057\u307e\u3046\u70b9\u306b\u3064\u3044\u3066\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046<br>\u6b21\u306e\u3088\u3046\u306a\u30b7\u30ca\u30ea\u30aa\u3092\u60f3\u5b9a\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002<br>  \u5225\u306e\u6a5f\u80fd\uff08\u4f8b\u3048\u3070TCP\/IP\u306e\u9001\u53d7\u4fe1\uff09\u3092\u5b9f\u73fe\u3059\u308b<br>  Windows\u7248\u3001Linux\u7248\u306e\u4e21\u65b9\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u6210\u3059\u308b<\/p>\n\n\n\n<p class=\"program_discription\">\u6a5f\u80fd\u3092\u5b9f\u73fe\u3059\u308b\u5ea6\u306b\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u5b9f\u73fe\u90e8\u5206\u304b\u3089\u4f5c\u3089\u306a\u3051\u308c\u3070\u306a\u3089\u306a\u308a\u307e\u305b\u3093\u3002<br>Windows\u3068Linux\u3067\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u90e8\u5206\u306e\u5b9f\u884c\u306e\u4ed5\u65b9\u304c\u9055\u3046\u306e\u3067<br>\u3082\u3057\u3001\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u5b9f\u73fe\u90e8\u5206\u3092\u72ec\u7acb\u3055\u305b\u7c21\u5358\u306b\u3064\u304b\u3048\u308c\u3070\u3001<br>\u5b9f\u73fe\u3057\u305f\u3044\u6a5f\u80fd\u306e\u307f\u306b\u96c6\u4e2d\u3067\u304d\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"program_discription\">\u4f8b\u3068\u3057\u3066\u3053\u3053\u3067\u306f\u3001\u6587\u5b57\u8868\u793a\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u3092\u5b9f\u73fe\u3059\u308b\u57fa\u672c\u30af\u30e9\u30b9\u304b\u3089\u306e<br>\u6d3e\u751f\u30af\u30e9\u30b9\u306b\u3088\u3063\u3066\u5b9f\u73fe\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p class=\"program_discription\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\uff08\u30af\u30e9\u30b9\uff09\u3092\u4f7f\u3063\u3066\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u3092\u5b9f\u73fe<br>\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u3092\u5b9f\u73fe\u3059\u308b\u57fa\u672c\u30af\u30e9\u30b9\u3001<strong>CThreadJob<\/strong>\u3092\u4f5c\u6210\u3057\u307e\u3059<br>\u3053\u308c\u306b\u3088\u308a\u3001\u30b8\u30e7\u30d6\u306e\u5b9f\u884c\u95a2\u6570\u3001\u5b9f\u884c\u3001\u505c\u6b62\u306a\u3069\u304c\u4f7f\u3044\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002<br>\u307e\u305f\u3001\u3053\u308c\u3092\u4f7f\u3046\u3053\u3068\u3067Windows\u3068Linux\u3068\u306e\u30bd\u30fc\u30b9\u30ec\u30d9\u30eb\u3067\u306e\u4e92\u63db\u6027\u304c<br>\u304b\u306a\u308a\u56f3\u308c\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010\u57fa\u672c\u30af\u30e9\u30b9(CThreadJob)\u306e\u30a4\u30e1\u30fc\u30b8\u3011\n\u30e1\u30bd\u30c3\u30c9, \u30d7\u30ed\u30d1\u30c6\u30a3\n    BOOL     Begin();          \/\/ \u30b9\u30ec\u30c3\u30c9\u3092\u958b\u59cb\u3059\u308b\n    void     End();            \/\/ \u30b9\u30ec\u30c3\u30c9\u3092\u505c\u6b62\n    DWORD    WaitForEnd();     \/\/ \u505c\u6b62\u3059\u308b\u307e\u3067\u5f85\u3064\n\n    \/\/ \u6d3e\u751f\u30af\u30e9\u30b9\u306e\u5b9f\u884c\u5185\u5bb9\u3092\u8a18\u8ff0\u3057\u305fDoWork\u3067\u30aa\u30fc\u30d0\u30e9\u30a4\u30c9\n    virtual UINT     DoWork() { return 0; };\n\nprotected:\n    volatile BOOL m_fStopFlag;  \/\/ \u7d42\u4e86\u7528\u30d5\u30e9\u30b0<\/p>\n\n\n\n<p class=\"program_discription\">\u5404\u6a5f\u80fd\uff08\u4f8b \u6307\u5b9a\u3055\u308c\u305f\u6587\u5b57\u3092\u6307\u5b9a\u3057\u305f\u9593\u9694\u3067\u8868\u793a\u3059\u308b\uff09\u306f\u6d3e\u751f\u30af\u30e9\u30b9\u3068\u3057\u3066\u5b9f\u73fe\u3057\u307e\u3059\u3002<br>\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u306e\u6a5f\u80fd\u306fCThreadJob\u306b\u5b9f\u88c5\u6e08\u306a\u306e\u3067\u3001\u6d3e\u751f\u30af\u30e9\u30b9\u3067\u306f<br>\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u3092 &#8220;\u307b\u3068\u3093\u3069&#8221; \u610f\u8b58\u3057\u306a\u304f\u3066\u6e08\u3080\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010\u6d3e\u751f\u30af\u30e9\u30b9(CMyThraed)\u306e\u30a4\u30e1\u30fc\u30b8\u3011\nclass CMyThread : public CThreadJob\n\/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u5b9f\u73fe\u3059\u308b\u6a5f\u80fd\u306b\u5fc5\u8981\u306a\u60c5\u5831\u3092\u683c\u7d0d\u3059\u308b\u69cb\u9020\u4f53\u3092\u5b9a\u7fa9\u3057\u3001\n\/\/ \u305d\u306e\u30dd\u30a4\u30f3\u30bf\u3092\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u6e21\u3059\n\/\/ \u6e21\u3055\u308c\u305f\u30d1\u30e9\u30e1\u30fc\u30bfpData\u306f\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u899a\u3048\u308b\n    CMyThread(MyDataRec *pData);\n\n    Begin()\u306f\u3001CThreadJob\u306b\u5b9f\u88c5\u6e08\u307f\u306a\u306e\u3067\u6d3e\u751f\u30af\u30e9\u30b9\u306b\u8a18\u8ff0\u3059\u308b\u5fc5\u8981\u306a\u3057\n    End()\u306f\u3001CThreadJob\u306b\u5b9f\u88c5\u6e08\u307f\u306a\u306e\u3067\u6d3e\u751f\u30af\u30e9\u30b9\u306b\u8a18\u8ff0\u3059\u308b\u5fc5\u8981\u306a\u3057\n\n\/\/ DoWork()\u306b\u6a5f\u80fd\u3092\u8a18\u8ff0\u3059\u308b\n    UINT DoWork() override;<\/p>\n\n\n\n<p class=\"program_discription\"><\/p>\n\n\n\n<p class=\"source_code\">\u3010\u4f7f\u3044\u65b9\u306e\u30a4\u30e1\u30fc\u30b8\u3011\n\/\/ \u5fc5\u8981\u306a\u60c5\u5831\u3092\u69cb\u9020\u4f53\u306b\u30bb\u30c3\u30c8\u3059\u308b\n    MyDataRec MyData = { &#8216;A&#8217;, 1000 };\n    CMyThread    *pCMyThread = NULL;\n\n\/\/ \u6d3e\u751f\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u6210\u3059\u308b\n\/\/ \u5fc5\u8981\u306a\u60c5\u5831\u3092\u5f15\u6570\u3068\u3057\u3066\u6e21\u3059\n    pCMyThread = new CMyThread(&amp;MyData);\n\/\/ \u30b9\u30ec\u30c3\u30c9\u306e\u958b\u59cb\n    pCMyThread-&gt;Begin();\n    getchar();\n\/\/ \u30b9\u30ec\u30c3\u30c9\u306b\u7d42\u4e86\u3092\u901a\u77e5\n    pCMyThread-&gt;End();\n\/\/ \u30b9\u30ec\u30c3\u30c9\u306e\u7d42\u4e86\u3092\u5f85\u3064\n    pCMyThread-&gt;WaitForEnd();\n\/\/ \u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u7834\u68c4\n    delete(pCMyThread);<\/p>\n\n\n\n<p class=\"program_discription\"><strong>CThreadJob(Windows\u7248)<\/strong>\u3092<a href=\"https:\/\/www.oji-koji.com\/?p=1092\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\"PrintM.cpp (\u65b0\u3057\u3044\u30bf\u30d6\u3067\u958b\u304f)\">PrintM.cpp<\/a>\u3092\u53c2\u7167\u3057\u3066\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u90e8\u5206\u3092\u62bd\u51fa\u3057\u3066\u4f5c\u6210\u3057\u307e\u3059\u3002<br>ThreadJob.h\u3067\u5ba3\u8a00\u3057\u3066\u3044\u308b(\u6d3e\u751f\u30af\u30e9\u30b9\u3067)\u30b8\u30e7\u30d6\u3092\u8a18\u8ff0\u3059\u308b\u95a2\u6570\u306e\u578b\u304c_beginthreadex\u3067<br>\u6307\u5b9a\u3059\u308b\u547c\u3073\u305f\u3057\u95a2\u6570\u306e\u578b\u3068\u7121\u95a2\u4fc2\u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u304a\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010ThreadJob.h\u3011\n#pragma once                \/\/ \u591a\u91cd\u306binclude\u3055\u308c\u306a\u3044\u305f\u3081\u306e\u8a18\u8ff0\n\n#include &#8220;stdThread.h&#8221;\n\nclass CThreadJob\n{\npublic:\n    CThreadJob();\n    ~CThreadJob();\n\n    BOOL     Begin();          \/\/ \u30b9\u30ec\u30c3\u30c9\u3092\u958b\u59cb\u3059\u308b\n    void     End();            \/\/ \u30b9\u30ec\u30c3\u30c9\u3092\u505c\u6b62\n    DWORD    WaitForEnd();     \/\/ \u505c\u6b62\u3059\u308b\u307e\u3067\u5f85\u3064\n\n    \/\/ \u6d3e\u751f\u30af\u30e9\u30b9\u306e\u5b9f\u884c\u5185\u5bb9\u3092\u8a18\u8ff0\u3057\u305fDoWork\u3067\u30aa\u30fc\u30d0\u30e9\u30a4\u30c9\n    virtual UINT     DoWork() { return 0; };\n\nprivate:\n    HANDLE    m_hThread;       \/\/ \u30b9\u30ec\u30c3\u30c9\u30cf\u30f3\u30c9\u30eb \u7d42\u4e86\u5f85\u3061\u306b\u4f7f\u7528\n\nprotected:\n    volatile BOOL m_fStopFlag; \/\/ \u7d42\u4e86\u7528\u30d5\u30e9\u30b0\n};<\/p>\n\n\n\n<p class=\"program_discription\">\u305d\u308c\u3067\u306fThreadJob.cpp\u306b\u95a2\u6570\u3092\u5b9f\u88c5\u3057\u307e\u3057\u3087\u3046\u3002<br>_beginthreadex\u306b\u6e21\u3059\u95a2\u6570\u306f\u3001\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u95a2\u6570\u3067\u306f\u306a\u3044\u306e\u3067<br>\u30b0\u30ed\u30fc\u30d0\u30eb(\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3068\u306f\u7121\u95a2\u4fc2)\u306b\u914d\u7f6e\u3055\u308c\u308b\u3088\u3046\u306b\u8a18\u8ff0\u3057\u307e\u3059\u3002<br>\u3053\u306e\u95a2\u6570\u5185\u3067\u3001\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f7f\u3044\u305f\u3044\u306e\u3067\u3001\u5f15\u6570\u3068\u3057\u3066\u306f\u30af\u30e9\u30b9\u306e<br>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30dd\u30a4\u30f3\u30bf(this)\u3092\u6e21\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010ThreadJob.cpp\u3011\n#include &#8220;ThreadJob.h&#8221;\n\n\/\/ _beginthreadex\u306b\u6e21\u3059\u95a2\u6570\n\/\/ \u30b0\u30ed\u30fc\u30d0\u30eb(\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3068\u306f\u7121\u95a2\u4fc2)\u306b\u914d\u7f6e\u3055\u308c\u307e\u3059\n\/\/ \u5f53\u7136\u30af\u30e9\u30b9\u306e\u30e1\u30f3\u30d0\u306b\u306f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u306e\u3067\n\/\/ \u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9(this)\u3092\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u6e21\u3057\u3066\u547c\u3073\u51fa\u3059\nunsigned int __stdcall ThreadProc(void *pvoid);\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/    \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n\/\/ parameter\n\/\/    \u306a\u3057\n\/\/ return\n\/\/    \u306a\u3057\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nCThreadJob::CThreadJob()\n{\n\/\/ \u30e1\u30f3\u30d0\u5909\u6570\u306e\u521d\u671f\u5316\n    m_hThread = 0;\n    m_fStopFlag = FALSE;\n}\n\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/    \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\n\/\/ parameter\n\/\/    \u306a\u3057\n\/\/ return\n\/\/    \u306a\u3057\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nCThreadJob::~CThreadJob()\n{\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/        \u30b9\u30ec\u30c3\u30c9\u958b\u59cb\n\/\/ parameter\n\/\/        \u306a\u3057\n\/\/ return\n\/\/        TRUE\/FALSE\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nBOOL CThreadJob::Begin()\n{\n    UINT    threadID;\n    BOOL    fRet;\n\n    m_fStopFlag = FALSE;\n    \/\/ ThreadProc\u304c\u30af\u30e9\u30b9\u30e1\u30f3\u30d0\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3088\u3046\u306b\n    \/\/ \u30af\u30e9\u30b9(\u5b9f\u969b\u306f\u6d3e\u751f\u30af\u30e9\u30b9)\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30dd\u30a4\u30f3\u30bf\u3092\u5f15\u6570\u3068\u3057\u3066\u6e21\u3059\n    m_hThread = (HANDLE)_beginthreadex(NULL, 0, ThreadProc, this, 0, &amp;threadID);\n    fRet = (m_hThread == 0) ? FALSE : TRUE;\n    return(fRet);\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/        \u30b9\u30ec\u30c3\u30c9\u3078\u7d42\u4e86\u3092\u901a\u77e5\n\/\/ parameter\n\/\/        \u306a\u3057\n\/\/ return\n\/\/        \u306a\u3057\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nvoid CThreadJob::End()\n{\n    m_fStopFlag = TRUE;\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/        \u30b9\u30ec\u30c3\u30c9\u306e\u7d42\u4e86\u3092\u5f85\u3064\n\/\/ parameter\n\/\/        \u306a\u3057\n\/\/ return\n\/\/        \u30b9\u30ec\u30c3\u30c9\u3067\u5b9f\u884c\u3057\u305f\u95a2\u6570\u306e\u623b\u308a\u5024\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nDWORD CThreadJob::WaitForEnd()\n{\n    DWORD    dwRet;\n\n    if (m_hThread)\n    {\n        while (1)\n        {\n            if (WaitForSingleObject((HANDLE)m_hThread, 50) == WAIT_OBJECT_0)\n            {\n                GetExitCodeThread(m_hThread, &amp;dwRet);\n                CloseHandle((HANDLE)m_hThread);\n                m_hThread = 0;\n                break;\n            }\n        }\n    }\n    return(dwRet);\n}\n\n\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/        \u5225\u30b9\u30ec\u30c3\u30c9\u3067\u5b9f\u884c\u3059\u308b\u95a2\u6570\n\/\/        \u6d3e\u751f\u30af\u30e9\u30b9\u3067\u30aa\u30fc\u30d0\u30e9\u30a4\u30c9\u3055\u308c\u308bDoWork\u3092\u547c\u3073\u51fa\u3059\n\/\/ parameter\n\/\/        void *pvoid    [in]CThreadJob\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\n\/\/ return\n\/\/        \u5b9f\u884c\u7d50\u679c\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nunsigned int __stdcall ThreadProc(void *pvoid)\n{\n    unsigned int    uRet;\n    CThreadJob  *pCThreadJob = (CThreadJob *)pvoid;\n\n    uRet = pCThreadJob-&gt;DoWork();\n    fprintf(stderr, &#8220;ThreadFunc End\\n&#8221;);\/\/ _endthreadex\u3088\u308a\u524d\u306b\u66f8\u304b\u306a\u3044\u3068\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\n    _endthreadex(uRet);                 \/\/ _endthreadex\u3092\u4f7f\u3046\u3068\u304d\u306f\u3053\u306e\u5f15\u6570\u304c\u623b\u308a\u5024\u3068\u306a\u308b\n    return(0);\n}<\/p>\n\n\n\n<p class=\"program_discription\"><strong>\u6307\u5b9a\u3055\u308c\u305f\u6587\u5b57\u3092\u6307\u5b9a\u3055\u308c\u305f\u9593\u9694\u3067\u8868\u793a\u3059\u308b\u6d3e\u751f\u30af\u30e9\u30b9(CMyThread)\u3092\u4f5c\u6210\u3057\u3066<br>PrintMA\u3068\u540c\u3058\u52d5\u4f5c\u3092\u3059\u308b\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u6210\u3057\u307e\u3057\u3087\u3046\u3002\uff08Windows\u7de8\uff09<\/strong><br>\u300c\u30d5\u30a1\u30a4\u30eb\u300d\u2192\u300c\u65b0\u898f\u4f5c\u6210\u300d\u2192\u300cVisualC++\u300d\u2192\u300c\u7a7a\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u300d<br>  \u300c\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3059\u308b\u300d\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3057\u307e\u3059\u3002<br>  \u300c\u5834\u6240\u300d\u306f\u5404\u81ea\u304c\u8aad\u307f\u66f8\u304d\u3067\u304d\u308b\u30d5\u30a9\u30eb\u30c0\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002<br>  \u300c\u540d\u524d\u300d\u306fPrintMAC\u3068\u3057\u307e\u3059\u3002<br>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u2192\u65e2\u5b58\u306e\u9805\u76ee\u306e\u8ffd\u52a0\u3092\u9078\u3073stdThread.cpp, stdThread.h\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<br>\u4e0a\u3067\u4f5c\u6210\u3057\u305fTheadJob.h, ThreadJob.cpp\u3092\u540c\u69d8\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002<br>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u2192\u65b0\u898f\u306e\u9805\u76ee\u306e\u8ffd\u52a0\u3092\u9078\u3073PrintMAC.cpp\u3092\u8ffd\u52a0\u3057\u307e\u3059\u3002<br>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u2192\u65b0\u898f\u306e\u9805\u76ee\u306e\u8ffd\u52a0\u3001C++\u306e\u30af\u30e9\u30b9\u3092\u9078\u3073\u307e\u3059\u3002<br>  <strong>\u30af\u30e9\u30b9\u540d\uff1aCMyThread \u30d5\u30a1\u30a4\u30eb\uff1aMyThread.h, MyThread.cpp<\/strong><br>  <strong>\u57fa\u5e95\u30af\u30e9\u30b9\uff1aCThreadJob<\/strong><br>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u2192\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u69cb\u6210\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u6587\u5b57\u30bb\u30c3\u30c8\u304c\u300c\u30de\u30eb\u30c1 \u30d0\u30a4\u30c8\u6587\u5b57\u30bb\u30c3\u30c8\u3092<br>\u4f7f\u7528\u3059\u308b\u300d\u306b\u306a\u3063\u3066\u3044\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<br>\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u306f64bits(x64)\u306b\u3057\u307e\u3057\u3087\u3046\u3002<\/p>\n\n\n\n<p class=\"program_discription\">MyThread.h\u3067\u3059\u3002<br>CThreadJob\u304b\u3089\u306e\u6d3e\u751f\u30af\u30e9\u30b9\u306b\u306a\u3063\u3066\u3044\u307e\u3059\u3002(class CMyThread : public CThreadJob)<br>\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306b\u306f\u3001Windows\u72ec\u81ea\u306e\u8a18\u8ff0\u304c\u3042\u308a\u307e\u305b\u3093\u3002<br>\u3064\u307e\u308a\u3001Linux\u3068\u30bd\u30fc\u30b9\u30ec\u30d9\u30eb\u3067\u5b8c\u5168\u306b\u4e92\u63db\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010MyThread.h\u3011\n#pragma once\n#include &#8220;ThreadJob.h&#8221;\n\n\n\/\/ \u5fc5\u8981\u306a\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u69cb\u9020\u4f53\u306b\u3059\u308b\ntypedef struct\n{\n    char    cData;          \/\/ \u8868\u793a\u3059\u308b\u6587\u5b57\n    DWORD   dwTimer;        \/\/ \u8868\u793a\u9593\u9694(msec)\n} MyDataRec;\n\nclass CMyThread : public CThreadJob\n{\npublic:\n    CMyThread(MyDataRec *pData);     \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u6e21\u3059\n    ~CMyThread();\n    \/\/ \u57fa\u5e95\u30af\u30e9\u30b9\u306e\u95a2\u6570\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b\n    \/\/ C++11\u3067\u660e\u793a\u7684\u306boverride\u3092\u66f8\u304f\u3053\u3068\u304c\u51fa\u6765\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\n    \/\/ \u57fa\u5e95\u30af\u30e9\u30b9\u306e\u5f53\u8a72\u95a2\u6570\u306bvirtual\u304c\u66f8\u3044\u3066\u3044\u306a\u3044\u3068\u30a8\u30e9\u30fc\u3092\u51fa\u3057\u3066\u304f\u308c\u307e\u3059\n    UINT DoWork() override;          \/\/ cData\u3092dwTime(msec)\u9593\u9694\u3067\u8868\u793a\u3059\u308b\nprivate:\n    MyDataRec    *m_pMyData;         \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u6e21\u3055\u308c\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u683c\u7d0d\n                                     \/\/ \u3053\u306e\u30b9\u30ec\u30c3\u30c9\u5b9f\u884c\u4e2d\u9818\u57df\u304c\u78ba\u4fdd\u3055\u308c\u3066\u3044\u308b\u3053\u3068\n};<\/p>\n\n\n\n<p class=\"program_discription\">MyThread.cpp\u3067\u3059\u3002<br>Windows\u72ec\u81ea\u306e\u8a18\u8ff0\u306fSleep\u3060\u3051\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010MyThread.cpp\u3011\n#include &#8220;MyThread.h&#8221;\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/    \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n\/\/ parameter\n\/\/    MyDataRec *pData    [in]\u6a5f\u80fd\u306b\u5fc5\u8981\u306a\u60c5\u5831\n\/\/ return\n\/\/    \u306a\u3057\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nCMyThread::CMyThread(MyDataRec *pData)\n{\n    m_pMyData = pData;\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/    \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\n\/\/ parameter\n\/\/    \u306a\u3057\n\/\/ return\n\/\/    \u306a\u3057\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nCMyThread::~CMyThread()\n{\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/    \u6a5f\u80fd\u3092\u8a18\u8ff0\u3057\u305f\u95a2\u6570\n\/\/ parameter\n\/\/    \u306a\u3057\n\/\/ return\n\/\/    0(\u7279\u306b\u30a8\u30e9\u30fc\u3082\u306a\u3044\u306e\u3067)\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nUINT CMyThread::DoWork()\n{\n    while (!m_fStopFlag)\n    {\n        fprintf(stderr, &#8220;%c\\n&#8221;, m_pMyData-&gt;cData);\n        Sleep(m_pMyData-&gt;dwTimer);\n    }\n    return(1);            \/\/ \u8fd4\u308a\u5024\u3068\u3057\u30661\u3092\u8fd4\u3057\u3066\u3044\u307e\u3059\n}<\/p>\n\n\n\n<p class=\"program_discription\">PrintMAC.cpp\u3067\u3059\u3002<br>Windows\u72ec\u81ea\u306e\u8a18\u8ff0\u306f\u3042\u308a\u307e\u305b\u3093\u3002<br>\u975e\u5e38\u306b\u30b3\u30fc\u30c9\u3082\u898b\u3084\u3059\u304f\u306a\u3063\u3066\u3044\u308b\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010PrintMAC.cpp\u3011\n#include    &#8220;MyThread.h&#8221;\n\nint main(int argc, char *argv[])\n{\n    MyDataRec MyData = { &#8216;A&#8217;, 1000 };\n    CMyThread    *pCMyThread = NULL;\n\n    pCMyThread = new CMyThread(&amp;MyData);    \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf(\u69cb\u9020\u4f53)\u306e\u30dd\u30a4\u30f3\u30bf\u3092\u6e21\u3059\n    pCMyThread-&gt;Begin();                    \/\/ \u958b\u59cb\n    getchar();                              \/\/ Enter\u30ad\u30fc\u5f85\u3061\n    pCMyThread-&gt;End();                      \/\/ \u30b9\u30ec\u30c3\u30c9\u306b\u7d42\u4e86\u3092\u901a\u77e5\n    pCMyThread-&gt;WaitForEnd();               \/\/ \u7d42\u4e86\u3059\u308b\u306e\u3092\u5f85\u3064\n    SAFE_DELETE(pCMyThread)                 \/\/ \u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u7834\u68c4\n    return(0);\n}<\/p>\n\n\n\n<p class=\"program_discription\"><strong>Linux\u7248PrintMAC<\/strong>\u3092\u4f5c\u3063\u3066\u307f\u307e\u3057\u3087\u3046\u3002<br>ThreadJob.h, ThreadJob.cpp\u306b\u3064\u3044\u3066\u3082Windows\u7248\u3092\u53c2\u8003\u306b\u30bd\u30fc\u30b9\u3092\u898b\u3066\u3082\u3089\u3046\u3068<br>\u7406\u89e3\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u3068\u601d\u3044\u307e\u3059\u3002<br>\u30d5\u30a1\u30a4\u30eb\u2192\u65b0\u898f\u4f5c\u6210\u2192\u30af\u30ed\u30b9\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u2192\u30e1\u30a4\u30af\u30d5\u30a1\u30a4\u30eb\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<br>  \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u540d\uff1aPrintMAC<br>  \u300c\u30bd\u30ea\u30e5\u30fc\u30b7\u30e7\u30f3\u306e\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u4f5c\u6210\u3059\u308b\u300d\u306e\u30c1\u30a7\u30c3\u30af\u3092\u5916\u3057\u307e\u3059\u3002<br>  <a href=\"https:\/\/www.oji-koji.com\/pro-files\/CommonLinux.zip\">stdThread.cpp, stdThread.h<\/a>\u3092\u30ea\u30f3\u30af\u304b\u3089\u53d6\u5f97\u3057\u3001\u65e2\u5b58\u306e\u9805\u76ee\u3068\u3057\u3066\u8ffd\u52a0\u3057\u307e\u3059\u3002<br>  makefile\u3092SimpleClient\u306a\u3069\u304b\u3089\u30b3\u30d4\u30fc\u3057\u3001\u65e2\u5b58\u306e\u9805\u76ee\u3068\u3057\u3066\u8ffd\u52a0\u3057\u307e\u3059\u3002<br>  ThreadJob.h, ThreadJob.cpp, MyThread.h, MyThread.cpp, PrintMAC.cpp\u3092<br>  \u65b0\u898f\u306e\u9805\u76ee\u3068\u3057\u3066\u8ffd\u52a0\u3057\u307e\u3059\u3002<br>  makefile\u3092\u5909\u66f4\u3057\u307e\u3059\u3002<br>  <a rel=\"noreferrer noopener\" aria-label=\"\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u8a2d\u5b9a\u306f\u3001\u3053\u3053\u3092\u53c2\u8003\u306b\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002 (\u65b0\u3057\u3044\u30bf\u30d6\u3067\u958b\u304f)\" href=\"https:\/\/www.oji-koji.com\/?p=108\" target=\"_blank\">\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u8a2d\u5b9a\u306f\u3001\u3053\u3053\u3092\u53c2\u8003\u306b\u884c\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/a><\/p>\n\n\n\n<p class=\"source_code\">\u3010makefile\u3011\nCC=g++ -g -O0\n#CC=g++\nPROGRAM=PrintMAC\nOBJS=PrintMA.o ThreadJob.o MyThread.o\n\nSRCS=$(OBJS:%.o=%.cpp)\nINCLUDE=stdThread.h\nLFLAGS=-lpthread\n\n$(PROGRAM):$(OBJS) $(SRCS) $(INCLUDE)\n\t$(CC) -o $(PROGRAM) $(SRCS) $(LFLAGS)<\/p>\n\n\n\n<p class=\"program_discription\">ThreadJob.h\u3067\u3059\u3002<br>\u9055\u3044\u306f\u30b9\u30ec\u30c3\u30c9\u306e\u7d42\u4e86\u3092\u5f85\u3064\u305f\u3081\u306b\u5fc5\u8981\u306a\u306e\u304c\u30cf\u30f3\u30c9\u30eb\u304b\u3089<br>\u30b9\u30ec\u30c3\u30c9\u8b58\u5225\u5b50\u306b\u306a\u3063\u3066\u3044\u308b\u3068\u3053\u308d\u3060\u3051\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010ThreadJob.h\u3011\n#pragma once\n\n#include    &#8220;stdThread.h&#8221;\n\nclass CThreadJob\n{\npublic:\n    CThreadJob(void);\n    ~CThreadJob(void);\n\n    BOOL     Begin();          \/\/ \u30b9\u30ec\u30c3\u30c9\u3092\u958b\u59cb\u3059\u308b\n    void     End();            \/\/ \u30b9\u30ec\u30c3\u30c9\u3092\u505c\u6b62\n    DWORD    WaitForEnd();     \/\/ \u505c\u6b62\u3059\u308b\u307e\u3067\u5f85\u3064\n\n    \/\/ \u6d3e\u751f\u30af\u30e9\u30b9\u306e\u5b9f\u884c\u5185\u5bb9\u3092\u8a18\u8ff0\u3057\u305fDoWork\u3067\u30aa\u30fc\u30d0\u30e9\u30a4\u30c9\n    virtual UINT     DoWork() { return 0; };\n\nprivate:\n    pthread_t    m_idThread;\n\nprotected:\n    volatile BOOL    m_fStopFlag;\n\n};<\/p>\n\n\n\n<p class=\"program_discription\">ThreadJob.cpp\u3067\u3059\u3002<br>Windows\u7248\u3068\u306e\u9055\u3044\u306f\u30b9\u30ec\u30c3\u30c9\u3067\u5b9f\u884c\u3059\u308b\u95a2\u6570\u306e\u578b\u3001\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u306e\u958b\u59cb\u3001\u7d42\u4e86\u3092\u3059\u308b\u95a2\u6570\u3001<br>\u7d42\u4e86\u3092\u5f85\u3064\u305f\u3081\u306b\u30b9\u30ec\u30c3\u30c9\u8b58\u5225\u5b50\u3092\u899a\u3048\u308b\u3068\u3044\u3046\u3068\u3053\u308d\u3067\u3059\u3002<br>PintMA\u3067\u4f5c\u3063\u305f\u3082\u306e\u3092\u30af\u30e9\u30b9\u306e\u30e1\u30bd\u30c3\u30c9\u3068\u3057\u3066\u8a18\u8ff0\u3057\u76f4\u3057\u3066\u3044\u308b\u3060\u3051\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010ThreadJob.cpp\u3011\n#include    &#8220;ThreadJob.h&#8221;\n\n\/\/ pthread_create\u306b\u6e21\u3059\u95a2\u6570\n\/\/ \u30b0\u30ed\u30fc\u30d0\u30eb(\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3068\u306f\u7121\u95a2\u4fc2)\u306b\u914d\u7f6e\u3055\u308c\u307e\u3059\n\/\/ \u5f53\u7136\u30af\u30e9\u30b9\u306e\u30e1\u30f3\u30d0\u306b\u306f\u30a2\u30af\u30bb\u30b9\u3067\u304d\u306a\u3044\u306e\u3067\n\/\/ \u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9(this)\u3092\u30d1\u30e9\u30e1\u30fc\u30bf\u3068\u3057\u3066\u6e21\u3057\u3066\u547c\u3073\u51fa\u3059\nvoid *ThreadFunc(void *pvoid);\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/    \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n\/\/ parameter\n\/\/    MyDataRec *pData    [in]\u6a5f\u80fd\u306b\u5fc5\u8981\u306a\u60c5\u5831\n\/\/ return\n\/\/    \u306a\u3057\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nCThreadJob::CThreadJob(void)\n{\n\/\/ \u30e1\u30f3\u30d0\u5909\u6570\u306e\u521d\u671f\u5316\n    m_idThread    = 0;\n    m_fStopFlag    = FALSE;\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/    \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\n\/\/ parameter\n\/\/    \u306a\u3057\n\/\/ return\n\/\/    \u306a\u3057\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nCThreadJob::~CThreadJob(void)\n{\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/        \u30b9\u30ec\u30c3\u30c9\u958b\u59cb\n\/\/ parameter\n\/\/        \u306a\u3057\n\/\/ return\n\/\/        TRUE\/FALSE\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nBOOL CThreadJob::Begin()\n{\n    int     iRet;\n    BOOL    fRet;\n\n    m_fStopFlag = FALSE;\n    \/\/ ThreadProc\u304c\u30af\u30e9\u30b9\u30e1\u30f3\u30d0\u306b\u30a2\u30af\u30bb\u30b9\u3067\u304d\u308b\u3088\u3046\u306b\n    \/\/ \u30af\u30e9\u30b9(\u5b9f\u969b\u306f\u6d3e\u751f\u30af\u30e9\u30b9)\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30dd\u30a4\u30f3\u30bf\u3092\u5f15\u6570\u3068\u3057\u3066\u6e21\u3059\n    iRet = pthread_create(&amp;m_idThread, NULL, ThreadFunc, this);\n    fRet = (iRet != 0) ? FALSE : TRUE;\n    return(fRet);\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/        \u30b9\u30ec\u30c3\u30c9\u3078\u7d42\u4e86\u3092\u901a\u77e5\n\/\/ parameter\n\/\/        \u306a\u3057\n\/\/ return\n\/\/        \u306a\u3057\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nvoid CThreadJob::End()\n{\n    m_fStopFlag = TRUE;\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/        \u30b9\u30ec\u30c3\u30c9\u7d42\u4e86\u3092\u5f85\u3064\n\/\/ parameter\n\/\/        \u306a\u3057\n\/\/ return\n\/\/        \u30b9\u30ec\u30c3\u30c9\u3067\u5b9f\u884c\u3057\u305f\u95a2\u6570\u306e\u623b\u308a\u5024\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nDWORD CThreadJob::WaitForEnd()\n{\n    DWORD    dwRet;\n    void    *pResult;\n\n    pthread_join(m_idThread, &amp;pResult);\n    dwRet = *(DWORD *)pResult;\n    SAFE_FREE(pResult)\n    return(dwRet);\n}\n\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\n\/\/ function\n\/\/        \u5225\u30b9\u30ec\u30c3\u30c9\u3067\u5b9f\u884c\u3059\u308b\u95a2\u6570\n\/\/        \u6d3e\u751f\u30af\u30e9\u30b9\u3067\u30aa\u30fc\u30d0\u30e9\u30a4\u30c9\u3055\u308c\u308bDoWork\u3092\u547c\u3073\u51fa\u3059\n\/\/ parameter\n\/\/        void *pvoid    [in]CThreadJob\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\n\/\/ return\n\/\/        \u5b9f\u884c\u7d50\u679c\n\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\nvoid *ThreadFunc(void *pvoid)\n{\n    DWORD    *pdwResult = (DWORD *)calloc(1, sizeof(DWORD));    \/\/ \u8fd4\u3059\u5024\u306f\u30a8\u30ea\u30a2\u3092\u78ba\u4fdd\n                                \n    CThreadJob  *pCThreadJob = (CThreadJob *)pvoid;\n    *pdwResult = pCThreadJob-&gt;DoWork();\n    printf(&#8220;ThreadFunc End\\n&#8221;);     \/\/ pthread_exit\u3088\u308a\u524d\u306b\u66f8\u304b\u306a\u3044\u3068\u5b9f\u884c\u3055\u308c\u307e\u305b\u3093\n    pthread_exit(pdwResult);        \/\/ \u8fd4\u3059\u5024\u306f\u3053\u306e\u95a2\u6570\u306b\u6e21\u3059\n    return(NULL);\n}<\/p>\n\n\n\n<p class=\"program_discription\">MyThread.h\u3067\u3059\u3002<br>\u3053\u308c\u306fWindows\u7248\u3068\u5168\u304f\u540c\u3058\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010MyThread.h\u3011\n#pragma once\n#include &#8220;ThreadJob.h&#8221;\n\n\n\/\/ \u5fc5\u8981\u306a\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u69cb\u9020\u4f53\u306b\u3059\u308b\ntypedef struct\n{\n    char    cData;            \/\/ \u8868\u793a\u3059\u308b\u6587\u5b57\n    DWORD   dwTimer;        \/\/ \u8868\u793a\u9593\u9694(msec)\n} MyDataRec;\n\n\nclass CMyThread : public CThreadJob\n{\npublic:\n    CMyThread(MyDataRec *pData);  \/\/ \u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u6e21\u3059\n    ~CMyThread();\n    \/\/ \u57fa\u5e95\u30af\u30e9\u30b9\u306e\u95a2\u6570\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\u3059\u308b\n    \/\/ C++11\u3067\u660e\u793a\u7684\u306boverride\u3092\u66f8\u304f\u3053\u3068\u304c\u51fa\u6765\u308b\u3088\u3046\u306b\u306a\u308a\u307e\u3057\u305f\n    \/\/ \u57fa\u5e95\u30af\u30e9\u30b9\u306e\u5f53\u8a72\u95a2\u6570\u306bvirtual\u304c\u66f8\u3044\u3066\u3044\u306a\u3044\u3068\u30a8\u30e9\u30fc\u3092\u51fa\u3057\u3066\u304f\u308c\u307e\u3059\n    UINT DoWork() override;            \/\/ cData\u3092dwTime(msec)\u9593\u9694\u3067\u8868\u793a\u3059\u308b\nprivate:\n    MyDataRec    *m_pMyData;        \/\/ \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\u3067\u6e21\u3055\u308c\u308b\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u683c\u7d0d\n                                    \/\/ \u3053\u306e\u30b9\u30ec\u30c3\u30c9\u5b9f\u884c\u4e2d\u9818\u57df\u304c\u78ba\u4fdd\u3055\u308c\u3066\u3044\u308b\u3053\u3068\n};<\/p>\n\n\n\n<p class=\"program_discription\">MyThread.cpp\u3067\u3059\u3002<br>Windows\u7248\u3068\u306e\u9055\u3044\u306fSleep\u3067\u306f\u306a\u304f\u3001usleep\u3092\u4f7f\u3063\u3066\u3044\u308b\u3068\u3053\u308d\u3060\u3051\u3067\u3059\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010MyThread.cpp\u3011\n#include &#8220;MyThread.h&#8221;\n\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\n\/\/ function\n\/\/    \u30b3\u30f3\u30b9\u30c8\u30e9\u30af\u30bf\n\/\/ parameter\n\/\/    MyDataRec *pData    [in]\u6a5f\u80fd\u306b\u5fc5\u8981\u306a\u60c5\u5831\n\/\/ return\n\/\/    \u306a\u3057\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\nCMyThread::CMyThread(MyDataRec *pData)\n{\n    m_pMyData = pData;\n}\n\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\n\/\/ function\n\/\/    \u30c7\u30b9\u30c8\u30e9\u30af\u30bf\n\/\/ parameter\n\/\/    \u306a\u3057\n\/\/ return\n\/\/    \u306a\u3057\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\nCMyThread::~CMyThread()\n{\n}\n\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\n\/\/ function\n\/\/    \u6a5f\u80fd\u3092\u8a18\u8ff0\u3057\u305f\u95a2\u6570\n\/\/ parameter\n\/\/    \u306a\u3057\n\/\/ return\n\/\/    0(\u7279\u306b\u30a8\u30e9\u30fc\u3082\u306a\u3044\u306e\u3067)\n\/\/&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-\nUINT CMyThread::DoWork()\n{\n    while (!m_fStopFlag)\n    {\n        fprintf(stderr, &#8220;%c\\n&#8221;, m_pMyData-&gt;cData);\n        usleep(m_pMyData-&gt;dwTimer * 1000);\n    }\n    return(1);\n}<\/p>\n\n\n\n<p class=\"program_discription\">\u6700\u5f8c\u306bPrintMAC.cpp\u3067\u3059\u3002<br>\u3082\u3061\u308d\u3093Windows\u7248\u3068\u306e\u9055\u3044\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n\n\n\n<p class=\"source_code\">\u3010PrintMAC.cpp\u3011\n#include    &#8220;MyThread.h&#8221;\n\n\nint main(int argc, char *argv[])\n{\n    MyDataRec MyData = { &#8216;A&#8217;, 1000 };\n    CMyThread    *pCMyThread = NULL;\n\n    pCMyThread = new CMyThread(&amp;MyData);\n    pCMyThread-&gt;Begin();\n    getchar();\n    pCMyThread-&gt;End();\n    pCMyThread-&gt;WaitForEnd();\n    delete(pCMyThread);\n    return(0);\n}<\/p>\n\n\n\n<p class=\"program_discription\">\u57fa\u672c\u30af\u30e9\u30b9CThredJob\u3092\u4f7f\u3046\u3053\u3068\u3067\u3001\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u306e\u6a5f\u80fd\u306e\u5b9f\u73fe\u306f<br>\u3053\u308c\u306b\u4efb\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<br>\u3053\u308c\u306e\u6d3e\u751f\u30af\u30e9\u30b9(DoWork\u95a2\u6570)\u306b\u3001\u6a5f\u80fd\u3092\u8a18\u8ff0\u3057\u307e\u3059\u304c\u3001Windows\u3068Linux\u306e<br>\u30bd\u30fc\u30b9\u30ec\u30d9\u30eb\u306e\u4e92\u63db\u6027\u304c\u304b\u306a\u308a\u5b9f\u73fe\u3055\u308c\u307e\u3059\u3002<br>main\u90e8\u5206\u306e\u4e92\u63db\u6027\u306f\u3082\u3063\u3068\u5b9f\u73fe\u3055\u308c\u3066\u3044\u308b\u3053\u3068\u304c\u308f\u304b\u308a\u307e\u3057\u305f\u3002<br>\u3053\u306e\u30af\u30e9\u30b9\u3092\u4f7f\u3063\u3066TCP\/IP\u306e\u9001\u53d7\u4fe1\u306e\u6a5f\u80fd\u3092\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u5316\u3059\u308b\u3053\u3068\u306b\u3057\u307e\u3057\u3087\u3046\u3002<br>\u305d\u306e\u524d\u306b\u3001\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u3092\u8003\u3048\u308b\u3068\u304d\u306b\u5fc5\u8981\u306a\u540c\u671f\u51e6\u7406\u306b\u3064\u3044\u3066\u3001<br>\u6b21\u56de\u89e6\u308c\u308b\u3053\u3068\u306b\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p><a href=\"https:\/\/www.oji-koji.com\/pro-files\/PrintMACWin.zip\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8PrintMAC for Windows<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/www.oji-koji.com\/pro-files\/PrintMACLinux.zip\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8PrintMAC for Linux<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u30de\u30eb\u30c1\u30b9\u30ec\u30c3\u30c9\u30d7\u30ed\u30b0\u30e9\u30e0\u304c\u96e3\u3057\u3044\u3068\u611f\u3058\u3066\u3057\u307e\u3046\u70b9\u306b\u3064\u3044\u3066\u8003\u3048\u3066\u307f\u307e\u3057\u3087\u3046\u6b21\u306e\u3088\u3046\u306a\u30b7\u30ca\u30ea\u30aa\u3092\u60f3\u5b9a\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002 \u5225\u306e\u6a5f\u80fd\uff08\u4f8b\u3048\u3070TCP\/IP\u306e\u9001\u53d7\u4fe1\uff09\u3092\u5b9f\u73fe\u3059\u308b Windows\u7248\u3001Linux\u7248\u306e\u4e21\u65b9\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u4f5c\u6210 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":129,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_locale":"","_original_post":"","footnotes":""},"categories":[6],"tags":[],"class_list":["post-1152","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-networkprograming","ja"],"_links":{"self":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/1152","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1152"}],"version-history":[{"count":50,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/1152\/revisions"}],"predecessor-version":[{"id":1365,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/posts\/1152\/revisions\/1365"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=\/wp\/v2\/media\/129"}],"wp:attachment":[{"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1152"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1152"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.oji-koji.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1152"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}