【Windows下多線程實現(命令行)】

 命令行程序也可以多線程。網上查了很多文章都是講視窗界面的,這裡我寫個命令行的,框架很簡單,如下:

 

// VRP.cpp : 定义控制台应用程序的入口点。
//


#include "stdafx.h"
#include "windows.h"

#include "VRP.h"

DWORD g_dwRipThreadId = 0;
DWORD g_dwOspfThreadId = 0;

int _tmain(int argc, _TCHAR* argv[])
{
    _tprintf(_T("Info: VRP is starting...\n"));

    LPVOID pvRipParameter = NULL;;
    HANDLE  hRip = CreateThread(NULL, 0, RIP_ThreadProc, pvRipParameter, 0, &g_dwRipThreadId);

    if(NULL == hRip)
    {
        _tprintf(_T("ERRO: Rip Thread create failure!\n"));
        return 0;
    }
    _tprintf(_T("INFO: Rip Thread create success!\n"));


    /

    LPVOID pvOspfParameter = NULL;;
    HANDLE  hOspf = CreateThread(NULL, 0, OSPF_ThreadProc, pvOspfParameter, 0, &g_dwOspfThreadId);

    if(NULL == hOspf)
    {
        _tprintf(_T("ERRO: Ospf Thread create failure!\n"));
        return 0;
    }
    _tprintf(_T("INFO: Ospf Thread create success!\n"));

    

    Sleep(2000);

    UINT Msg = MY_MSG;

    int count = 0;
    TCHAR * wParam = new TCHAR[MAX_INFO_SIZE]; //create dynamic msg
    LPARAM IParam = NULL;

    while(true)
    {
        Sleep(2000);

        if(0 == count % 2)
        {
            _stprintf(wParam, _T("main -> rip msg_%d"), ++count);
    
            //
            if(false == PostThreadMessage(g_dwRipThreadId, Msg, (WPARAM)wParam, IParam))
            {
                _tprintf(_T("ERRO: PostThreadMessage -> Rip failure!\n"));
            }
        }
        else
        {
            _stprintf(wParam, _T("main -> ospf msg_%d"), ++count);
    
            //
            if(false == PostThreadMessage(g_dwOspfThreadId, Msg, (WPARAM)wParam, IParam))
            {
                _tprintf(_T("ERRO: PostThreadMessage -> Ospf failure!\n"));
            }
        }

        //LRESULT SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam);
    }

    CloseHandle(hRip);
    CloseHandle(hOspf);
    getchar();
    return 0;
}

//
DWORD WINAPI RIP_ThreadProc (LPVOID lpParam) 
{
    //
    _tprintf(_T("INFO: RIP_Task has been created!\n"));


    MSG Msg;
    _TCHAR * pInfo = NULL;
    PeekMessage(&Msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);

    //發消息變量
    UINT uiMsg = MY_MSG;

    int iCount = 0;
    TCHAR * wParam = new TCHAR[MAX_INFO_SIZE]; //create dynamic msg
    LPARAM IParam = NULL;

    while(true)
    {
        if(GetMessage(&Msg, NULL, 0, 0)) //get msg from message queue
        {
            switch(Msg.message)
            {
            case MY_MSG:
                pInfo = (_TCHAR *)Msg.wParam;
                _tprintf(_T("RIP: recv %s\n"), pInfo);
                break;
            }
        }

        _stprintf(wParam, _T("rip -> ospf msg_%d"), ++iCount);
    
        //
        Sleep(2000);
        if(false == PostThreadMessage(g_dwOspfThreadId, uiMsg, (WPARAM)wParam, IParam))
        {
            _tprintf(_T("ERRO: PostThreadMessage -> Rip failure!\n"));
        }
    }

    //
    delete pInfo;

    return 0;
}


//
DWORD WINAPI OSPF_ThreadProc (LPVOID lpParam) 
{
    //
    _tprintf(_T("INFO: OSPF_Task has been created!\n"));


    MSG Msg;
    _TCHAR * pInfo = NULL;
    PeekMessage(&Msg, NULL, WM_USER, WM_USER, PM_NOREMOVE);

    while(true)
    {
        if(GetMessage(&Msg, NULL, 0, 0)) //get msg from message queue
        {
            switch(Msg.message)
            {
            case MY_MSG:
                pInfo = (_TCHAR *)Msg.wParam;
                _tprintf(_T("OSPF: recv %s\n"), pInfo);
                break;
            }
        }
    }

    //
    delete pInfo;

    return 0;
}


 

#ifndef _VRP_H_
#define _VRP_H_

#define MY_MSG WM_USER + 100

const int MAX_INFO_SIZE = 20;

DWORD WINAPI RIP_ThreadProc (LPVOID lpParam);
DWORD WINAPI OSPF_ThreadProc (LPVOID lpParam);
#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值