小编sha*_*dow的帖子

为什么GCC似乎没有文件系统标准库?

我面临文件系统库的问题,它应该包含在c ++ 17编译器中,2天后我试图在raspberry pi中安装gcc-7.0.2但是它没有用,它无法识别命令gcc-7或g ++ - 7甚至-std=c++17所以我必须安装g ++ - 6和gcc-6 apt-get install ,在安装6版之后,编译器包含c ++ 17.我使用代码块作为IDE,我不得不添加一个新的编译器并添加选项-std = c ++ 17来启用它,但在主代码中,当我包含文件系统库时,它没有说这样的文件或目录.

我的问题是,如何才能正确添加c ++ 17编译器及其库(如文件系统)?

c++ gcc raspberry-pi gcc6 c++17

11
推荐指数
2
解决办法
9265
查看次数

如何在python中使用参数创建单例类

我正在寻找正确的方法来创建在第一次创建中接受参数的单例类。我的研究将我引向3种不同的方式:

元类

class Singleton(type):
    instance = None
    def __call__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super(Singleton, cls).__call__(*args, **kwargs)
        return cls.instance

class ASingleton(metaclass=Singleton):
    pass
Run Code Online (Sandbox Code Playgroud)

__新__

class Singleton(object):
    instance = None
    def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super().__new__(cls, *args, **kwargs)
        return cls.instance
Run Code Online (Sandbox Code Playgroud)

装饰器

def Singleton(myClass):
    instances={}
    def getInstance(*args, **kwargs):
        if myClass not in instances:
            instances[myClass] = myClass(*args, **kwargs)
        return instances[myClass]
    return getInstance

@Singleton
class SingletonTest(object):
    pass
Run Code Online (Sandbox Code Playgroud)

所有这些都可以正常工作,但是当涉及到初始化时(例如在普通类中使用__init__),我无法找出实现它的正确方法。我能想到的唯一解决方案是以这种方式使用metaclass方法:

class Singleton(type):
    instance = None

    def __call__(cls, …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

3
推荐指数
2
解决办法
1254
查看次数

如何在freeRTOS中向多个接收器发送队列消息?

我正在寻找一种在 freeRTOS 中使用队列广播消息的方法,我提出了不同的想法,但每个人都有不同的问题。

我拥有的:

  • 队列的项目类型是一个结构体,它有一个属性来指示消息是广播还是针对特定任务。
  • 将消息写入队列的广播任务。
  • 一个队列管理器任务,如果收到任何新消息,它将查看队列,并且如果消息有目的地,那么它将恢复该特定任务或恢复所有任务(如果它是广播)。
  • 对于接收器任务,我提出了这些想法:

    1. 如果我使用接收函数,xQueueReceive只有任务队列中的第一个任务会读取消息并将其从队列中删除,这样其他任务将无法读取该广播消息。另一方面,这是定向消息(针对特定任务的消息)的完美原因。
    2. 如果我使用 peedk 函数xQueuePeek,消息将永远不会从队列中删除,除非我使用xQueueReceive它有点多余(在同一个任务中查看和接收,meeh,丑陋的编码)并且我不能使用任何其他删除函数,因为它会删除整个队列。但这将解决特定任务的消息,为了解决广播消息,我需要为每个接收任务设置优先级,并且只有优先级最低的任务才会使用xQueueReceive 从队列中删除该消息,所有接收任务将在偷看或阅读后暂停自己,这样他们就不会再次阅读该消息(我不确定如何处理队列管理器任务,因为我无法暂停它,它会保持队列中的新消息的通知,直到最后一个任务收到它),但整个系统将需要等待该低优先级任务运行以删除该消息以及在该时间内收到的任何新消息,它将不会被读入真实的时间。

我仍在考虑其他方法,例如为每个接收任务使用新队列或队列,但我不确定哪种方法是最好的。而且我不知道是否还有其他原因即使不使用队列技术也要广播消息。

我需要告诉你这个程序不是针对特定项目的。我只是想以不同的方式使用队列技术。我已经找到了关于广播消息的其他帖子,但这是针对特定问题的,他们在不使用队列技术的情况下解决了该问题。我只想将“这是一条广播消息”发送到队列,并且所有接收器都能够读取一次(仅一次)。

谢谢你。

queue freertos esp32

1
推荐指数
1
解决办法
670
查看次数

标签 统计

c++ ×1

c++17 ×1

esp32 ×1

freertos ×1

gcc ×1

gcc6 ×1

python ×1

python-3.x ×1

queue ×1

raspberry-pi ×1