多线程执行 [大三四八九月实习]

1多线程执行分析

由当前运行程序[进程 ]创建一个子进程开始,可以将原来的进程看成主线程,被创建的进程称之为子线程。

 

C ++boost库利用对象的构造函数来实现线程对象被创建时就开始执行的机制,当一个子线程被创建时,主线程与子线程【在有多个子线程时,各个线程之间也是被交互执行着】被交互执行,只是作为人类的我们无法从感官之上感觉它们彼此是被交互执行的,因为交互执行的时间很小很小【运行得极快】,所以我们也可以从一定程度的宏观上认为多个线程就是“同时”在被执行着。单个线程被执行的时间可被称为“时间片”。

多线程执行 [大三四八九月实习]_第1张图片

 

图1 线程执行描述图

 

2 程序实例

用VS2010建立一个非空控制台程序。然后在.cpp中写入如下代码【代码可略过】:

#include "stdafx.h"
#include <iostream>
#include <boost/thread.hpp>

using namespace std;
using namespace boost;

#define BOOST_DATE_TIME_SOURCE
#define BOOST_THREAD_NO_LIB


//----------------------------------
//函数声明
//----------------------------------
void print_string( const string &str );


int _tmain(int argc, _TCHAR* argv[])
{
        int i;
	char str[]= "\n|||||||||||||||||";

        thread my_thread_1( print_string, "\n**********" );


	for ( i = 0; i < strlen(str); ++i ){
		cout << str;
	}

	getchar();
	return 0;
}


//------------------
//打印字符串到标准流
//------------------
void print_string( const string &str )
{
        int i;

        for( i = 0; i < str.length(); ++i ){
		cout << str[i];
	}
	
	cout << str;
        
}

运行结果如下:

多线程执行 [大三四八九月实习]_第2张图片                  多线程执行 [大三四八九月实习]_第3张图片             多线程执行 [大三四八九月实习]_第4张图片

图2 运行结果1                                  图3 运行结果2                                              图4 运行结果3

 

由多次的运行结果可知,每次运行的结果是可能会完全不一样的,但是可以表明两个线程都是“同时”在运行。有时候主线程一下子就被执行完毕并被输出到窗口之中,有时候每个线程都运行一点。也有可能不只是表明现象。

 

在进程中创建线程,各线程对进程所带来的效果可视为同时的。比如一个进程中显示多路视频,每路视频由一个线程来负责显示,每个线程对应的窗口上的视频都是连续的,尽管每个窗口的下一帧视频流的显示是有顺序的,但是我们看不出来,以为它们是各自在连续独立的进行视频显示。

 

当然了,如果要使多个线程之间彼此有联系,那么就是线程之间的通信了,比如只有在线程1执行完毕之后线程2才能执行,那么线程1就要和线程2进行通信了。各个线程之间的通信由线程类thread内的函数成员来完成。如果允许用户继承的话,用户还可以编写自己的线程通信函数。

 

这些内容都是我随便想想而做的笔记。

 

 

Thread Note Over。

你可能感兴趣的:(多线程执行 [大三四八九月实习])