C++ 多线程编程

C++ 多线程编程在Windows和Linux下的使用方法是不一样的。


Windows 下:

要包含头文件:#include "windows.h"

使用CreateThread函数来创建线程。例子如下:

#include "iostream"
#include "windows.h"
using namespace std;

// 参数结构体
struct argument
{
    int num;
    char string[30];
};

DWORD WINAPI Fun(LPVOID lpParameter)
{
    struct argument *arg_thread; // 接收传递过来的参数结构体

    arg_thread = ( struct argument * )lpParameter;
    while (1)
    {
        printf( "我来自线程1,传递给我的参数是 %d, %s\n", arg_thread->num, arg_thread->string);
        Sleep(1000);
    }
}


void main()
{

    struct argument arg1, arg2;
    int i;
    int wait_thread_end; //判断线程退出成功与否
    //参数结构体值初始化
    arg1.num = 1949;
    strcpy( arg1.string, "中华人民共和国" );

    arg2.num = 2012;
    strcpy( arg2.string, "建国63周年" );

    HANDLE hThread1 = CreateThread(NULL,0,Fun,(void*)&arg1,0,NULL);
    HANDLE hThread2 = CreateThread(NULL,0,Fun,(void*)&arg2,0,NULL);
    CloseHandle(hThread1);
    CloseHandle(hThread2);
    while (1)
    {
        cout << "Main display!" << endl;
        Sleep(1000);
    }
    system("pause");
}


Linux  下:

具体例子

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <string.h>

// 参数结构体
struct argument
{
  int num;
  char string[30];
};

// 声明两个线程函数
void *thread1_func( void * );
void *thread2_func( void * );

int main(int argc, char *argv[])
{
  //定义两个线程标识符
  pthread_t thread1, thread2;
  //定义用来接收两个线程退出后的返回值,用作pthread_join的第二个参数
  void *thread1_return, *thread2_return;
  //传递的参数结构体
  struct argument arg1, arg2;
  int i;
  int wait_thread_end; //判断线程退出成功与否
  //参数结构体值初始化
  arg1.num = 1949;
  strcpy( arg1.string, "中华人民共和国" );
 
  arg2.num = 2012;
  strcpy( arg2.string, "建国63周年" );
 
  // 创建两个线程
  pthread_create(&thread1, NULL, thread1_func, (void*)&arg1 );
  pthread_create( &thread2, NULL, thread2_func, (void*)&arg2 );
 
  for( i = 0; i < 2; i++ )
  {
    printf("我是最初的进程!\n");
    sleep(2);  //主统线程睡眠,调用其他线程
  }
 
  //等待第一个线程退出,并接收它的返回值(返回值存储在thread1_return)
  wait_thread_end = pthread_join( thread1, &thread1_return );
  if( wait_thread_end != 0 )
  {
    printf("调用 pthread_join 获取线程1的返回值出现错误!\n");
  }
  else
  {
    printf("调用 pthread_join 成功!线程1退出后的返回值是 %d\n", (int)thread1_return);
  }
 
  //等待第二个线程退出,并接收它的返回值(返回值存储在thread2_return)
  wait_thread_end = pthread_join( thread2, &thread2_return);
  if( wait_thread_end != 0 )
  {
    printf("调用 pthread_join 获取线程2的返回值出现错误!\n");
  }
  else
  {
    printf("调用 pthread_join 成功!线程2退出后的返回值是 %d\n",(int)thread2_return );
  }

  return EXIT_SUCCESS;
}

/**
 *线程1函数实现
 */
 void *thread1_func( void *arg )
{
  int i;
  struct argument *arg_thread1; // 接收传递过来的参数结构体
 
  arg_thread1 = ( struct argument * )arg;
 
  for( i = 0; i < 3; i++)
  {
    printf( "我来自线程1,传递给我的参数是 %d, %s\n", arg_thread1->num, arg_thread1->string);
    sleep(2); // 投入睡眠,调用其它线程
  }
  return (void *)123;
}

 void *thread2_func( void *arg )
{
  int i;
  struct argument *arg_thread2; // 接收传递过来的参数结构体
 
  arg_thread2 = ( struct argument * )arg;
 
  for( i = 0; i < 3; i++)
  {
    printf( "我来自线程2,传递给我的参数是 %d, %s\n", arg_thread2->num, arg_thread2->string);
    sleep(2); // 投入睡眠,调用其它线程
  }
  return (void *)456;
}




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值