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

来源:互联网 发布:win7语音朗读软件 编辑:程序博客网 时间:2024/05/01 01:10

1多线程执行分析

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

 

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

 

图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 运行结果1                                  图3 运行结果2                                              图4 运行结果3

 

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

 

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

 

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

 

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

 

 

Thread Note Over。