自由当前运行程序[进程 ]创建一个子进程开始,可以将原来的进程看成主线程,被创建的进程称之为子线程。
C ++的boost库利用对象的构造函数来实现线程对象被创建时就开始执行的机制,当一个子线程被创建时,主线程与子线程【在有多个子线程时,各个线程之间也是被交互执行着】被交互执行,只是作为人类的我们无法从感官之上感觉它们彼此是被交互执行的,因为交互执行的时间很小很小【运行得极快】,所以我们也可以从一定程度的宏观上认为多个线程就是“同时”在被执行着。单个线程被执行的时间可被称为“时间片”。
图1 线程执行描述图
用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。