小编Shu*_*hum的帖子

在C/C++中产生线程的跨平台方式?

在C和C++中是否有一种产生线程的跨平台方式?像sched_yield()或Sleep(0)之类的东西?SDL_Delay(0)总是会产生或者在某些实现中会立即返回吗?

c c++ multithreading sdl cross-platform

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

如何使用 cppclean 查找未使用的标头

我正在寻找一种工具来帮助检测大型 C++ 代码库中包含的不必要的头文件。关于这个主题的其他 stackoverflow 问题都建议使用 cppclean。所以我已经安装了 cppclean 并且我正在尝试使用它,但即使在一些微不足道的错误示例中,它也没有给出任何结果。

例如,这是我要清理的内容。源文件:

// foo.cpp
#include "bar.h"

void main() { };
Run Code Online (Sandbox Code Playgroud)

和头文件:

// bar.h
class bar {
};
Run Code Online (Sandbox Code Playgroud)

我跑:

cppclean foo.cpp
Run Code Online (Sandbox Code Playgroud)

但它不打印任何内容并返回 0。

难道我做错了什么?是否有任何有关如何使用此工具的教程?

c++ header-files

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

使用线程时终生难过

我很难编译这个:

use std::thread::{self, JoinHandle};

struct Foo<'c> {
    foo: &'c str,
}

impl<'c> Foo<'c> {
    fn use_in_another_thread<F>(self, mut cb: F) -> JoinHandle<Foo<'c>>
        where F: FnOnce(&mut Foo),
              F: Send
    {
        thread::spawn(move || {
            cb(&mut self);
            self
        })
    }
}

fn main() {}
Run Code Online (Sandbox Code Playgroud)

据我所知,生命是健全的,但我收到了错误......

error[E0477]: the type `[closure@src/main.rs:12:23: 15:10 cb:F, self:Foo<'c>]` does not fulfill the required lifetime
  --> src/main.rs:12:9
   |
12 |         thread::spawn(move || {
   |         ^^^^^^^^^^^^^
   |
   = note: type must outlive the static lifetime

error[E0495]: cannot infer an appropriate lifetime due …
Run Code Online (Sandbox Code Playgroud)

closures lifetime rust

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

如何在TensorFlow中使用图形中的循环构建简单的RNN?

我刚开始玩TensorFlow,我正在尝试实现一个非常简单的RNN.RNN具有x作为输出的输入,y并且仅由单个层构成,x并且其先前的输出作为输入.这是我想到的那种事情的图片:

一个简单的RNN

问题是,我无法通过TensorFlow API看到构建带有循环的图形.每当我定义Tensor时,我必须指定它的输入是什么,这意味着我必须已经定义了它的输入.所以有鸡和蛋的问题.

我甚至不知道是否有意义定义带有循环的图形(首先计算什么?我是否必须定义softmax节点的初始值?).我玩了一个使用变量来表示先前输出的想法,然后手动获取值y并在每次通过训练样本后将其存储在变量中.但除非有一种方法可以在图形本身中表示这个过程,因此这将非常缓慢(?).

我知道TensorFlow教程展示了RNN的示例实现,但他们欺骗并将LSTM模块拉出已经具有循环的库.总的来说,这些教程很适合让你了解如何构建某些东西,但是他们可以更好地解释这个野兽是如何工作的.

那么,TensorFlow专家,有没有办法构建这个东西?我该怎么做呢?

neural-network tensorflow

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

在python中,有没有办法让线程在不再引用它们时死掉?

有时我想要一个由工作线程不断更新的类,它在创建时会产生.基本上是这样的:

class MyWidget:
    def __init__(self):
        self.blah = None
        self.thread = MyThread(self)
        self.thread.start()

    def update(self, blah):
        self.blah = blah

class MyThread(threading.Thread):
    def __init__(self, widget):
        self.widget = widget

    def run(self):
        while True:
            time.sleep(1)
            blah = poll()
            self.widget.update(blah)
Run Code Online (Sandbox Code Playgroud)

我想要一个安全的方法来设计这个,以便我确定线程在MyWidget不再需要时死掉.上面代码的问题MyWidget在于它永远不会死,因为它会被它保持活着MyThread.我可以给修复MyThreadweakref.refMyWidget,打破循环的时候参考模,但我已经在过去没有这样的错误.

我真正喜欢的是将垃圾与其他一切一起收集的线程.即.当它的引用图和主线程的引用图是不相交时被杀死的线程.是否有可能写出这样的野兽?他们已经存在吗?

python multithreading

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

将Webassembly编译为本机可执行文件

是否有任何工具可以将wasm模块编译为本地可执行文件(例如,ELF或.exe文件)?类似脚本,但相反。失败了,还有其他方法可以在浏览器之外运行webassembly吗?

transpiler webassembly

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

C中的const值

此代码无法编译:

const int x = 123;
const int y = x;
Run Code Online (Sandbox Code Playgroud)

它抱怨y =行的"初始化元素不是常数".基本上我想要有两个const值,一个是根据另一个定义的.有没有办法在C中执行此操作或者我是否必须使用type-unsafe #defines或者只是将值写为幻数?

c const

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

然后在C中强制引用指针

char在C中使用缓冲区时,有时能够一次使用int大小的数据块会更有用,也更有效.要做到这一点,我可以将我char *转换为int *并使用该指针代替.但是,我并不完全相信这种方式与我认为的方式相同.

例如,假设我有char *data,并*(int32_t *)data = -1始终覆盖字节data[0],data[1],data[2]data[3]没有其他字节?

c pointers

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

有没有办法让GCC/Clang知道C中的继承?

我正在编写一个C库,它使用一些简单的面向对象的继承,就像这样:

struct Base {
    int x;
};

struct Derived {
    struct Base base;
    int y;
};
Run Code Online (Sandbox Code Playgroud)

现在我想将Derived*传递给一个带有Base*的函数:

int getx(struct Base *arg) {
    return arg->x;
};

int main() {
    struct Derived d;
    return getx(&d);
};
Run Code Online (Sandbox Code Playgroud)

这是有效的,当然是类型安全的,但编译器不知道这一点.有没有办法告诉编译器这是类型安全的?我只关注GCC并在这里铿锵作响,因此欢迎编译器特定的答案.我有一些模糊的记忆,看到一些代码可以使用__attribute__((inherits(Base))或类似的东西,但我的记忆可能在撒谎.

c inheritance gcc clang

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

如何获取git中索引的树形哈希?

使用 git,如何获取分阶段更改的树哈希?也就是说,如果我提交了更改,提交的树哈希(不是提交哈希)将是什么?

git

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

在C++中,是否可以让一个类继承自其中一个成员类?

以下代码无法编译,因为编译器不知道foo::bar它何时遇到它.

class foo : foo::bar {
    class bar {
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个代码(或它的一些变体)编译?

c++ inheritance

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

git复制特定版本的存储库

如果这是一个愚蠢的问题,我是git的新手,请原谅我.我有一个git存储库,我需要将存储库的特定版本复制到它自己的单独目录.复制的版本本身不需要是git存储库,我不需要或不需要历史记录或.git文件夹,只需要存储库对特定提交的外观.

所以说我这样做:

mkdir blah
cd blah
git init
touch flim0
git add .
git commit -a -m "First commit"
touch flim1
git add .
git commit -a -m "Second commit"

mystery-command ~/some-folder 4be82b42cc91ac3801ad72036cec5f88b6a13bd7
Run Code Online (Sandbox Code Playgroud)

其中4be82b42cc91ac3801ad72036cec5f88b6a13bd7是"第一次提交"的哈希,我想〜/ some-folder是一个只包含文件flim0的目录.

这是否容易/可能无需克隆存储库然后签出特定的修订版然后从克隆的存储库中删除.git?

git

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

C++:是否可以继承赋值运算符?

以下C++代码无法编译:

class BaseA {
protected:
    BaseA &operator = (const BaseA &rhs);
};

template<typename T>
class BaseB {
public:
    T &operator = (const T &rhs) {
        return *static_cast<T *>(this);
    };
};

class Derived :
    public BaseA,
    public BaseB<Derived> {
};

int main() {
    Derived foo;
    Derived bar;
    foo = bar;
    return 0;
};
Run Code Online (Sandbox Code Playgroud)

当我尝试编译这个时,我得到一个BaseA &BaseA::operator = (const BaseA &)未定义的投诉.在stackoverflow上还有其他几个这样的问题,但它们似乎都关注编译器自动生成一个Derived &Derived::operator = (const Derived &)调用的函数BaseA::operator = (const BaseA&).在这种情况下,虽然Derived应该已经继承了具有该确切签名的函数BaseB<Derived>.如果我按照另一个问题的建议并添加using BaseB<Derived>::operator =;到 …

c++ inheritance templates

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