C++实现的一个简单的多线程程序

来源:互联网 发布:淘宝店铺装修设计论文 编辑:程序博客网 时间:2024/06/07 03:44

#include <stdio.h>
#include <windows.h>
#include <process.h>
#include <stdlib.h>


LONG gCurThreadNum = 0;
int gThinkTime = 0;
bool gStop = false;


bool Connect()
{
    return true;
}


bool Send()
{
    return true;
}


UINT WINAPI ThreadProc( void* param )
{
    Sleep( 100 );
    // 发送数据
    while( !gStop )
    {
        printf( "Test............./n" );
        // 请在此处实现发送的处理
        //..........
        Sleep( gThinkTime );
    }

    // 线程退出
    InterlockedDecrement(&gCurThreadNum);
    return 0;
}


// 启动线程
void Start( int threadNum, int thinkTime )
{
    gStop = false;
    gThinkTime = thinkTime;

    for ( int i=0; i<threadNum; i++ )
    {
        UINT threadId = 0;
        HANDLE hThread = (HANDLE)_beginthreadex( NULL,     0, ThreadProc, NULL, 0, &threadId );

        if ( hThread )
        {
            printf( "第%2d个线程启动成功。/n", i );
            InterlockedIncrement(&gCurThreadNum);
        }
        else
        {
            printf( "第%2d个线程启动失败。/n", i );
        }
    }
}


// 停止线程
void Stop()
{
    gStop = true;

    while ( gCurThreadNum > 0 )
    {
        Sleep( 100 );
    }
}


int main( int argc, char** argv )
{
    printf( "车联网服务端测试程序运行中[Q/q+回车退出]:/n" );

    int threadNum = 2;    // 线程数
    int thinkTime = 1000;    // 思考时间

    if ( argc<2 )
    {
        printf( "输入的参数不完整,使用默认参数:线程数[2 个线程] 思考时间[1000 毫秒]。/n" );
    }
    else
    {
        if ( threadNum < 0 )
        {
            threadNum = 2;
        }

        if ( thinkTime < 10 )
        {
            thinkTime = 1000;
        }
    }

    // 启动线程
    Start( threadNum, thinkTime );

    // 提示
    printf( "当前运行了线程数为:%d 个/n", gCurThreadNum );
    printf( "每个线程思考时间为:%d 毫秒/n", gThinkTime );

    // 挂起
    while( true )
    {
        char ret = getchar();
        if ( ret == 'q' ||  ret == 'Q' )
        {
            // 停止线程
            Stop();
            break;
        }
    }

    // 线程退出
    printf( "测试停止。/n" );
    getchar();

    return 0;
}

原创粉丝点击