c++-C++ 线程和仿函数的问题??

问题描述

C++ 线程和仿函数的问题??
 #include<iostream>
#include<thread>
using namespace std;
void function_1()
{
    std::cout << "Hello,world!" << std::endl;
}
class Fctor {                                      //仿函数
public:
    void operator()() {                    //对()进行重载
        for (int i = 0; i > -100; i--) {
            cout << "from t1 " << i << endl;
        }
    }
};
int main() {
    //Fctor fct;
    std::thread t1((Fctor()));         //t1  starts  running. 实例化一个线程对象t1
    try {
        for (int i = 0; i < 100; i++)
            cout << "from main: " << i << endl;
    }
    catch (...) {
        t1.join();
        throw;
    }
    t1.join();
    //t1.detach();
    return 0;
}

其中这句 std::thread t1((Fctor())); 为什么要再“Fctor()”两边还要加括号?否则“ t1.join();”这句会提示错误??
还有能解释下执行结果吗?

解决方案

线程函数有关的问题
线程函数有关的问题
线程创建的函数选择问题

解决方案二:

thread要求一个线程函数,所以你不能用类名,而需要用它的仿函数。

解决方案三:

这个软件里面怎么获得C币啊,下个文档真的好麻烦。

解决方案四:

加括号表示是一个表达式,对其可以求值。而不加括号被编译器理解成一个函数,而在链接期间才发现问题无法编译通过。所以要加括号。
Fctor() :可以理解成函数名字为Fctor的函数。
(Fctor()): 作为表达式。
这是c++解析语法的时候无法区分的。。

时间: 2024-12-03 10:32:03

c++-C++ 线程和仿函数的问题??的相关文章

【C/C++学院】0816-引用包装器/仿函数/转义字符 R”()”/using别名/模板元编程 比递归优化/智能指针/多线程/静态断言以及调试技能的要求 assert

引用包装器  std::ref(变量) #include<iostream> template<class T> void com(T arg)//模板函数,引用无效,引用包装器 { std::cout <<"com ="<< &arg << "\n"; arg++; } void main() { int count = 10; int & rcount = count; com(coun

一个boost底下的线程池

Boost的thread库中目前并没有提供线程池,我在sorceforge上找了一个用boost编写的线程池.该线程池和boost结合的比较好,并且提供了多种任务执行策略,使用也非常简单. 下载地址: http://threadpool.sourceforge.net/ 使用threadpool: 这个线程池不需要编译,只要在项目中包含其头文件就可以了. 一个简单的例子: #include <iostream>#include "threadpool.hpp" using 

STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数

 1.STL(Standard Template Library,是用泛型技术来设计完成的实例)的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) Adaptors(配接器)   STL的六大组件分别是: 容器(Container) 算法(Algorithm) 迭代器(Iterator) 仿函数(Function object) 适配器(Adapter) 空间配置器(allocator):只能分配内存等   2.容器与算法 案例如下: #incl

深入解析C++编程中线程池的使用_C 语言

为什么需要线程池目前的大多数网络服务器,包括Web服务器.Email服务器以及数据库服务器等都具有一个共同点,就是单位时间内必须处理数目巨大的连接请求,但处理时间却相对较短. 传 统多线程方案中我们采用的服务器模型则是一旦接受到请求之后,即创建一个新的线程,由该线程执行任务.任务执行完毕后,线程退出,这就是是"即时创建,即 时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器将处于 不停的创建线程,销

新人一枚,请问怎样从B线程调用A线程的内容?

问题描述 新人一枚,请问怎样从B线程调用A线程的内容? 具体要求:写一个线程A,得到0-10的随机数,再写一个线程B来了调用线程A!!!!! 解决方案 int a;//全局变量,如果多个线程同步访问需要加锁 A...//线程A B...//线程B 代码结构大致如上,访问的时候,因为变量a是全局数据,所以在线程A和B中都可以直接访问,就好像C中的任何函数都可以访问和使用全局变量一样 解决方案二: 放是全局变量来交换数据

并发集合(三)使用阻塞线程安全的列表

使用阻塞线程安全的列表 列表(list)是最基本的集合.一个列表中的元素数量是不确定的,并且你可以添加.读取和删除任意位置上的元素.并发列表允许不同的线程在同一时刻对列表里的元素进行添加或删除,而不会产生任何数据不一致的问题. 在这个指南中,你将学习如何在你的并发应用程序中使用阻塞的列表.阻塞列表与非阻塞列表的主要区别是,阻塞列表有添加和删除元素的方法,如果由于列表已满或为空而导致这些操作不能立即进行,它们将阻塞调用的线程,直到这些操作可以进行.Java包含实现阻塞列表的LinkedBlocki

[转载]Linux 线程实现机制分析

  自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的.   一.基础知识:线程和进程 按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位.在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开

你真的了解:IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数 吗?

原文:你真的了解:IIS连接数.IIS并发连接数.IIS最大并发工作线程数.应用程序池的队列长度.应用程序池的最大工作进程数 吗? IIS连接数   一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数 顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫"IIS限制连接数" 这边客户请求的连接内容包括: 1.网站html请求,html中的图片资源,html中的脚本资源,其他需要连接下载的资源等等,任何一个资源的请求

我的代码是怎么进入死循环的,为什么有两个线程运行一会就唤不醒了

问题描述 classResource{privateStringname;privateintcount=1;privatebooleanflag=false;publicsynchronizedvoidset(Stringname){while(flag){notify();try{wait();}catch(InterruptedExceptione){}System.out.println(Thread.currentThread().getName()+"....循环唤醒..."