栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++11 thread学习

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++11 thread学习

学习目标:

1.main函数里使用thread,调用普通函数

2.main函数里使用thread,调用class中的函数

3.在class中声明thread成员,调用class中线程函数

4.结合lamda表达式,使用thread

5.不同thread间,线程同步、互斥访问

6.线程优先级如何设置?

目标1:main函数里使用thread,调用普通函数

        main函数中,启动thread调用全局函数,

  •         无参:void ThreadFun();
  •         有参:void ThreadFunParam(int i,int j,char* pszArr);

                代码如下:

// thread example
#include        // std::cout
#include          // std::threa

void ThreadFun()
{
	// do stuff...
	std::cout << "ThreadFun running" << std::endl;
}
void ThreadFunParam(int i,int j,char* pszArr)
{
	std::cout << "ThreadFunParam running" << std::endl;
	std::cout << "i:" << i << ",j:" << j << std::endl;
	if (nullptr != pszArr)
	{
		std::cout << "pszArr:" << pszArr << std::endl;
	}
	else
	{
		std::cout << "pszArr is nullptr"  << std::endl;
	}	
}

int main()
{
	std::thread first(ThreadFun);     // spawn new thread that calls ThreadFun()

	char szArr[100] = "hello thread world!";
	std::thread secondThread(ThreadFunParam, 10, 20,szArr);// spawn new thread that calls ThreadFunParam()

	std::cout << "main, foo and bar now execute concurrently...n";

	// synchronize threads:
	first.join();                // pauses until first finishes
	secondThread.join();

	std::cout << "Thread completed.n";
	return 0;
}
目标2:main函数里使用thread,调用class中的函数

main函数中启动thread,调用class中的函数

  •         无参:void foo() 
  •         有参:void funParam(int i)
  •         静态有参:static void funStatic(int i) 
#include 
#include 

class bar {
public:
    void foo() {
        std::cout << "hello from member function" << std::endl;
    }
    void funParam(int i)
    {
        std::cout << "funParam fun start,i:"< 
目标3:在class中声明thread成员,调用class中线程函数 
  • 无参:   void foo()
  • 有参:    void funParam(int i)
  • 静态有参:    static void funStatic(int i)
#include 
#include 

class bar {
public:
    bar()
    {
        pt3 = nullptr;
    }
    //~bar()
    //{
    //   
    //}
    void foo() {
        std::cout << "foo fun running" << std::endl;
    }
    void funParam(int i)
    {
        std::cout << "funParam fun start,i:" << i << std::endl;
    }
    static void funStatic(int i)
    {
        std::cout << "funStatic fun start,i:" << i << std::endl;
    }

    void startThread3()
    {
        pt3 = new std::thread(funStatic,30);
        pt3->join();
        //pt3->detach();
    }
    std::thread* pt3;

    void startThread2()
    {
        t2 = std::thread(&bar::foo, bar());
        t2.join();
        //t2.detach();
    }
    std::thread t2;

    void startThread()
    {
        t1 = std::thread(funStatic, 20);
        t1.join();
    }
    std::thread t1;
};

int main()
{
    {
        bar b1;
        b1.startThread();
        b1.startThread2();
        b1.startThread3();
    }

    std::cout << "main end" << std::endl;
    return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008446.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号