小编ula*_*ade的帖子

分配时Python字典键错误 - 我该如何解决这个问题?

我有一个我这样创建的字典:

myDict = {}
Run Code Online (Sandbox Code Playgroud)

然后我想在其中添加与另一个字典对应的键,其中我放了另一个值:

myDict[2000]['hello'] = 50
Run Code Online (Sandbox Code Playgroud)

所以,当我经过myDict[2000]['hello']某个地方时,它会给予50.

为什么Python不只是在那里创建这些条目?有什么问题?我认为只有当你尝试读取一个不存在的条目时才会出现KeyError,但我正在这里创建它?

python dictionary keyerror

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

根据intel博客实现concurrent_vector

我试图实现一个线程安全的无锁容器,类似于std :: vector,根据这个https://software.intel.com/en-us/blogs/2008/07/24/tbbconcurrent_vector-secrets-of-记忆组织

根据我的理解,为了防止重新分配并使所有线程上的所有迭代器无效,而不是单个连续数组,它们会添加新的连续块.
他们添加的每个块都具有增加2的幂的大小,因此他们可以使用log(index)来找到[index]处的项目所在的正确段.

从我收集的内容来看,他们有一个静态的指向段的指针,因此他们可以快速访问它们,但是他们不知道用户想要多少段,所以他们做了一个小的初始段,如果段的数量超过了当前计数,他们分配一个巨大的,并切换到使用那个.

问题是,添加新段不能以无锁线程安全方式完成,或者至少我还没弄明白如何.我可以原子地增加当前大小,但仅限于此.
而且从小型指针到大型段指针的切换涉及大量的分配和内存副本,所以我无法理解它们是如何做到的.

他们有一些在线发布的代码,但所有重要的功能都没有可用的源代码,它们都在他们的Thread Building Blocks DLL中.以下是一些演示此问题的代码:

template<typename T>
class concurrent_vector
{
    private:
        int size = 0;
        int lastSegmentIndex = 0;

        union
        {
            T* segmentsSmall[3];
            T** segmentsLarge;
        };

        void switch_to_large()
        {
            //Bunch of allocations, creates a T* segmentsLarge[32] basically and reassigns all old entries into it
        }

    public:
        concurrent_vector()
        {
            //The initial array is contiguous just for the sake of cache optimization
            T* initialContiguousBlock = new T[2 + 4 + 8]; //2^1 + 2^2 …
Run Code Online (Sandbox Code Playgroud)

c++ arrays multithreading lockless

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

分支掩码如何在CryENGINE 3中工作?

这部分CryENGINE SDK标题引起了我的注意:

branchmask.h

#ifndef __BRANCHLESS_MASK__
#define __BRANCHLESS_MASK__

///////////////////////////////////////////
// helper functions for branch elimination
//
// msb/lsb - most/less significant byte
//
// mask - 0xFFFFFFFF
// nz   - not zero
// zr   - is zero

ILINE const uint32 nz2msb(const uint32 x)
{
    return -(int32)x | x;
}

ILINE const uint32 msb2mask(const uint32 x)
{
    return (int32)(x) >> 31;
}

ILINE const uint32 nz2one(const uint32 x)
{
    return nz2msb(x) >> 31; // int((bool)x);
}

ILINE const uint32 nz2mask(const uint32 x) …
Run Code Online (Sandbox Code Playgroud)

c++ optimization loops cryengine

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

QTreeWidget内的QT Clickable小部件(可能是按钮)?

我有一个基本上是QTreeWidget的表,我想放一个可点击的小部件,可能还有一个按钮.每一行都是QTreeWidgetItem,但我看不出如何添加一个带有QTreeWidgetItem :: setData的按钮

c++ qt

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

如何将__declspec(align(16))与模板一起使用?

我试图使我class 16-byte与之一致__declspec(align(16)); 但是,这是一个模板类。

如果我__declspec(align(16))在template关键字之前放置,它告诉我那里不允许使用变量属性。

如果将其放在class关键字之前,则整个类将变得无效,并且所有方法都将显示错误。

那怎么办呢?

c++ class alignment visual-c++

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

wxPythong-从wx.CallAfter获取返回值?

当我从非主线程调用wx函数时,我使用wx.CallAfter,但是当我想获取被调用函数的返回值时会发生什么呢?那我该怎么办?它存储在某个地方吗?

python multithreading wxpython

5
推荐指数
0
解决办法
367
查看次数

Qt模式识别字符串的段

Qt是否能够识别出您正在编写邮件列表,并在每封邮件之后将其转换为带有x按钮的小部件(有点像Gmail一样).是否有一些内置功能或必须从头开始制作?

c++ qt

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

Qt 从 QHBoxLayout 中删除拉伸

在添加了一段之后QBoxLayout::addStretch,我可以以某种方式将其删除吗?我想在我添加的每个小部件之后在布局的末尾继续添加一个拉伸,所以我必须删除旧的拉伸,添加新的小部件并在此之后添加一个新的拉伸。

c++ qt

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

Unity3D 以编程方式更改锚点 - 它如何影响位置

在 Unity3D 中,当我在编辑器中移动对象的锚点时,它会保持原位,可能是因为编辑器会自动修改某些内容。

但是当我在脚本中以编程方式更改它们(锚点)时,对象会更改其位置。

我知道我可以在更改锚点后存储位置并再次设置它,以保留位置,但我要问的是 - 有谁知道在运行时更改锚点究竟是如何影响位置的?

他们是否遵循特定的公式?

user-interface unity-game-engine

5
推荐指数
0
解决办法
761
查看次数

在 Vulkan 中为每个线程创建多个命令池

我正在尝试使用 Vulkan 设置多线程渲染器,但我有一个关于命令池的问题。

在这里https://on-demand.gputechconf.com/siggraph/2016/video/sig1625-tristan-lorach-vulkan-nvidia-essentials.mp4在 13 分钟,他们讨论了如何为每个 FRAME 和周期制作 1 个命令池它们在环形缓冲区中。 在此处输入图片说明

为什么为每个线程分配 3 个命令池(3 帧环形缓冲区中的每个帧一个),而不是每个线程只有一个命令池并从中拥有 3 个命令缓冲区?

c++ multithreading vulkan

5
推荐指数
2
解决办法
950
查看次数