C++ 多线程编程
2013-09-25 12:41
190 查看
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;
}
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;
}
相关文章推荐
- Windows C++多线程与Linux C++多线程编程
- C++ 多线程编程总结
- C++多线程编程,既是难点又是重点
- c++多线程编程
- C++多线程编程
- C++服务器(五):pthread多线程编程
- linux C++ 多线程编程
- Linux下C++的多线程编程
- C++多线程编程简单实例
- C++常见多线程编程
- C++多线程编程(四)线程的同步
- C++多线程编程简单实例
- Qt C++ 并发,并行,多线程编程系列1 什么是并发
- C++多线程编程,既是难点又是重点
- Linux C++的多线程编程
- C++多线程编程简单实例
- C++多线程编程
- Linux下C++的多线程编程
- c++多线程编程
- C++多线程编程简单实例