小编lve*_*lla的帖子

用临时函数对象进行全局初始化

以下代码

#include <random>
std::mt19937 generator((std::random_device())());
Run Code Online (Sandbox Code Playgroud)

使用clang编译文件:

$ clang++ -c -std=c++0x test.cpp
Run Code Online (Sandbox Code Playgroud)

但是gcc失败了:

$ g++ -c -std=c++0x test.cpp 
test.cpp:3:47: erro: expected primary-expression before ‘)’ token
Run Code Online (Sandbox Code Playgroud)

该代码在C++ 11中是否有效?这是GCC中的错误还是Clang的扩展错误?

c++ gcc clang c++11

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

永远运行异步事件循环的Python方式是什么?

文档来看,启动异步应用程序的推荐方法似乎是使用asyncio.run(),所以我的应用程序如下所示:

async def async_main():
    # Everything here can use asyncio.create_task():
    o = ObjectThatMustBeKeptReferenced()
    create_tasks_and_register_callbacks(o)

    # Wait forever, ugly:
    while True:
        await asyncio.sleep(10000)

asyncio.run(async_main())
Run Code Online (Sandbox Code Playgroud)

最后的无限循环async_main()感觉非常错误。在其他语言中,我会永远调用事件循环。所以我尝试了这个:

def main():
    loop = asyncio.get_event_loop()

    # Everything here can use asyncio.create_task():
    o = ObjectThatMustBeKeptReferenced()
    create_tasks_and_register_callbacks(o)

    # Wait forever, pretty:
    loop.run_forever()

main()
Run Code Online (Sandbox Code Playgroud)

RuntimeError: no running event loop这里的问题是,当我在函数内部调用时asyncio.create_task(),即使事件循环是在线程上创建并注册的,这也会失败并出现各种错误。

什么是Pythonic,一种在asyncio事件循环中永远休眠的方法?

python asynchronous python-3.x python-asyncio

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

信号处理和 fork() 之间的竞争条件

我想安装一个信号处理程序来传播SIGHUP到另一个进程组中的子进程,但似乎在 POSIX 中我只能从fork().

fork()那么,有没有一种方法可以避免当您在父级中返回之前收到 SIGHUP但setpgid()子级中已执行之后发生的竞争条件?

c posix process

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

如何使进程知道同一程序的其他进程

我必须编写一个程序,必须知道在该机器上运行的另一个自身实例,并与之通信,然后死掉.我想知道在Linux中是否有一种规范的方法.

我首先想到的是每一个程序执行时间编写包含进程的PID somewere一个文件,并查看该文件,但如果是该文件的"正确"的地方,叫什么名字?是否有更好或更"正确"的方式?

然后我必须沟通,说用户试图运行它,但由于还有另一个实例,它将移交作业并退出.我想过只发送一个信号,比如SIGUSR1,但这不允许我发送更多信息,比如用户执行第二个进程的X11显示.如何发送此信息?

该程序与Gtk链接,因此使用glib的解决方案是可以的.

c c++ linux ipc

10
推荐指数
3
解决办法
565
查看次数

英特尔的RDRAND有合法用途吗?

今天我想:好吧,即使RDRAND对NIST SP 800-90A的实施有很大的怀疑,它仍然是伪随机数发生器(PRNG)的硬件实现,对于非敏感应用来说必须足够好.所以我想在我的游戏而不是Mersenne Twister上使用它.

因此,为了查看使用该指令是否有任何性能提升,我比较了以下两个代码的时间:

// test.cpp
#include <cstdio>

int main()
{
    unsigned int rnd = 0;
    for(int i = 0; i < 10000000; ++i) {
        __builtin_ia32_rdrand32_step(&rnd);
    }
    printf("%x\n", rnd);
}
Run Code Online (Sandbox Code Playgroud)

//test2.cpp
#include <cstdio>
#include <random>

int main()
{
    unsigned int rnd = 0;
    __builtin_ia32_rdrand32_step(&rnd);
    std::mt19937 gen(rnd);
    for(int i = 0; i < 10000000; ++i) {
        rnd ^= gen();
    }
    printf("%x\n", rnd);
}
Run Code Online (Sandbox Code Playgroud)

通过运行这两个我得到:

$ time ./test
d230449a

real    0m0.361s
user    0m0.358s
sys     0m0.002s

$ time ./test2 
bfc4e472 …
Run Code Online (Sandbox Code Playgroud)

random cryptography stream-cipher rdrand

10
推荐指数
2
解决办法
8633
查看次数

如何覆盖dpkg-buildflags CFLAGS?

我得到了一个包裹:

$ apt-get source <pkg-name>
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试用以下方法构建它:

$ dpkg-buildpackage -uc -us -j8
Run Code Online (Sandbox Code Playgroud)

在输出的开头,有声明:

dpkg-buildpackage: export CFLAGS from dpkg-buildflags (origin: vendor): -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security
dpkg-buildpackage: export CPPFLAGS from dpkg-buildflags (origin: vendor): -D_FORTIFY_SOURCE=2
dpkg-buildpackage: export CXXFLAGS from dpkg-buildflags (origin: vendor): -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security
dpkg-buildpackage: export FFLAGS from dpkg-buildflags (origin: vendor): -g -O2
dpkg-buildpackage: export LDFLAGS from dpkg-buildflags (origin: vendor): -Wl,-Bsymbolic-functions -Wl,-z,relro
Run Code Online (Sandbox Code Playgroud)

我想覆盖这些CFLAGS(也就是LDFLAGS).我尝试导出CFLAGS envvar,就像我们使用plain configure一样,无济于事.我该如何覆盖这些值?

ubuntu debian build dpkg

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

如何将几何体分成块?

我确信已经有一些算法可以满足我的需求,但我不确定谷歌会使用什么词组,或者算法类别是什么.

这是我的问题:我有一个由多个接触块(hyperslabs)组成的多面体,即边缘是轴对齐的,边缘之间的角度是90°.多面体内可能有孔.

我想把这个凹面多面体分解成一个小的凸矩形轴对齐的整块是可能的(如果原始的多面体是凸的并且没有孔,那么它已经是这样的块,因此,解决方案).为了说明,我制作了一些二维图像(但我需要3-D的解决方案,最好是ND):

我有这个几何:

原版的

一个可能分解成块的是:

可能

但我想要的是这个(尽可能少的块):

正确

我的印象是一个精确的算法可能太昂贵了(这个问题是NP难吗?),所以近似算法是合适的.

一个细节可能会使问题更容易,因此可能有一个更合适/专业的算法是所有边都有一些固定值的大小倍数(你可能认为所有边大小都是整数,或几何是由均匀的小方块或体素组成).

背景:这是PDE域的结构化网格离散化.

什么算法可以解决这个问题?我应该搜索哪种算法?

algorithm partitioning computational-geometry

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

从罪中获得cos(a)的最佳方法(a)

s一些(未知)角度"a"的正弦,获得"余弦"的最快方法是什么?

我知道两种不同的方式:

c = cos(asin(s));
Run Code Online (Sandbox Code Playgroud)

c = sqrt(1 - s*s);
Run Code Online (Sandbox Code Playgroud)

但我不知道函数cos(),asin()和sqrt()的实现如何在速度方面相互比较.一个人比另一个人快多快?它们在现代处理器中的实现之间是否存在显着差异,例如,在x86-64和带VFP的ARM之间?最后,什么是更好的解决方案?

编辑:由于现在已经有3个不相关的答案,让我澄清一下:我最初没有这个角度,我只有正弦.所以没有必要告诉我将角度旋转90度所以我将从另一个函数获得相同的值...

c++ floating-point trigonometry

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

我如何使用ProGuard?

我试图学习如何使用ProGuard,这并不像我想象的那么容易.起初我发现了一个简单的Java代码来尝试它,一个简单的两类Swing计算器.

可以通过以下链接找到代码,但我发现在这里发布它太冗长了.无论如何,它是一个带入口点的普通应用程序,Calc.main()没有包.

然后我编译了两个来源:

$ javac *.java
Run Code Online (Sandbox Code Playgroud)

并创建了该.jar文件(因为看起来ProGuard只适用于jar):

$ jar cvef Calc calc.jar *.class
added manifest
adding: Calc.class(in = 3869) (out= 2126)(deflated 45%)
adding: Calc$ClearListener.class(in = 468) (out= 327)(deflated 30%)
adding: CalcLogic.class(in = 1004) (out= 515)(deflated 48%)
adding: Calc$NumListener.class(in = 1005) (out= 598)(deflated 40%)
adding: Calc$OpListener.class(in = 1788) (out= 1005)(deflated 43%)
Run Code Online (Sandbox Code Playgroud)

写了名为的ProGuard文件obfuscate.pro:

-injars       calc.jar
-outjars      calc_obf.jar
-libraryjars  <java.home>/lib/rt.jar

-keep public class Calc extends javax.swing.JFrame {
public static void main(java.lang.String[]);
}
Run Code Online (Sandbox Code Playgroud)

最后运行ProGuard: …

java command-line proguard

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

移动构造函数不是继承的,也不是默认生成的

我尝试std::ifstream使用一个函数进行扩展,以便更轻松地读取二进制变量,令我惊讶的是,using std::ifstream::ifstream;移动构造函数没有被继承。更糟糕的是,它被明确删除。

#include <fstream>

class BinFile: public std::ifstream
{
public:
    using std::ifstream::ifstream;
    //BinFile(BinFile&&) = default; // <- compilation warning: Explicitly defaulted move constructor is implicitly deleted

    template<typename T>
    bool read_binary(T* var, std::streamsize nmemb = 1)
    {
        const std::streamsize count = nmemb * sizeof *var;
        read(reinterpret_cast<char*>(var), count);
        return gcount() == count;
    }
};

auto f()
{
    std::ifstream ret("some file"); // Works!
    //BinFile ret("some file"); // <- compilation error: Call to implicitly-deleted copy constructor of 'BinFile'
    return ret; …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance move-semantics c++11 c++17

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