C++多线程简单入门(二)(Windows版)
之前那片文章簡述了如何使用C++多線程。
C++多線程模擬就好像是自己在做一件事情,但是感覺不夠快,就跟自己的朋友說,在自己做的這一部分的時候,你去幫我做另外一部分,那么這樣就提高了效率。
(點擊可查看)在這篇文章中,我們可以看出用endl是比直接寫\n要慢的。所以,我這個要這個特點來展現多線程的過程。
我們不妨來看一下這段代碼:
#include <iostream> using namespace std; #include <thread> void hello() {for (int i = 0; i < 5; ++i) {cout << "In hello()"<< i << endl;} } int main() {thread t(hello);cout << "Before join()\n";t.join(); // 表示在新開的那個進程不結束之前,本進程也是不會結束的cout << "After main()\n";system("pause"); }這個代碼,我就是在之前的那個版本上進行改進而得到的。在此,我故意在main函數中的部分,使用\n,在hello()函數中用endl。然后接下來,我們會看看輸出的結果,這樣來體會下join()函數。
原理:因為,我們知道了\n要比endl輸出的要快。那么可以看到main函數肯定是要比hello函數要輸出的要快的。
可以看出,Hello跟Before應該是差不多時間出現的,但是之后的After main()是在之前的函數都已經完成之后才出現了。
于是,我們可以猜測,join函數就好像做了限制,就是在這個打開的進程要先完成之后,原來的進程才動。
但具體還是要驗證下:我們將join給關掉。(也就是把這句話給注釋掉)
改完的代碼如下:
#include <iostream> using namespace std; #include <thread> void hello() {for (int i = 0; i < 5; ++i) {cout << "In hello()"<< i << endl;} } int main() {thread t(hello);cout << "Before join()\n";//t.join(); // 表示在新開的那個進程不結束之前,本進程也是不會結束的cout << "After main()\n";system("pause"); }然后我們再看輸出
發現了沒有,這個main是先自己做好了。但由于我在VS上為了現實,我都是加了system("pause")將框給停下來的,不然的話,這個其實會有點隱患的,畢竟自己你認為這個主函數結束了,所有的程序都結束了,但是實際上卻是有程序還在運行,這樣不就是很冒險么?
- 不過在主程序的運行的很快,所以導致在這連這個endl都還沒有運行完的時候,就main所有的都結束了。所以就會有那個空行。
總結
以上是生活随笔為你收集整理的C++多线程简单入门(二)(Windows版)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++多线程简单入门(Windows版本
- 下一篇: Python动态网页爬虫技巧Seleni