小编Emi*_*ano的帖子

使用wxpython进行双缓冲

我正在使用wxpython处理多平台应用程序,并且在绘制Panel时我在Windows上出现了闪烁问题.我曾经在鼠标运动事件中绘制缓冲区(wx.Bitmap),而我的OnPaint方法只是在线组成:

dc = wx.BufferedPaintDC(self, self.buffer)
Run Code Online (Sandbox Code Playgroud)

相当标准,但我仍然在Windows上有闪烁的问题,而一切都在Linux上运行良好.

解决我的问题调用SetDoubleBuffered(True)__init__方法.

奇怪的是,即使我不再使用BufferedPaintDC,现在一切正常.我更改了我的应用程序,以便所有绘图部分都在OnPaint方法中完成.我不使用缓冲区,直接在wx.PaintDC上完成绘图,完全没有闪烁问题.

所以我的问题是:BufferedPaintDC完全没用吗?或者以某种方式弃用?我是"WxPython in Action"(2006)一书的所有者,它甚至没有提到SetDoubleBuffered

python user-interface wxpython doublebuffered

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

使用GPL的非GPL内核模块

我工作的公司正在开发一个闭源内核模块(.ko文件).该模块必须调用gpl2模块中包含的函数.基本上我们有这样的情况:

// GPL 2 kernel module  (gpl.c -> gpl.ko)
void a_function(void)
{
// ...
}
EXPORT_SYMBOL(a_function)


// Closed Source module (closed.c -> closed.ko)
a_function();
Run Code Online (Sandbox Code Playgroud)

这合法吗?在此示例中,我们是否违反了GPL2许可?请注意,closed.c不包括任何gpl2头文件.

licensing gpl linux-kernel

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

调用临时对象的方法是否安全?

我有一个函数,它将返回一个char*.由于我必须连接一些字符串,我写了以下行:

std::string other_text;
// ...
func(("text" + other_text).c_str());
Run Code Online (Sandbox Code Playgroud)

我知道我可以避免命名我想要使用的字符串的问题.我只是想借此机会提出一个更普遍的问题:调用临时变量的方法是否安全?它符合标准吗?

c++ string stl g++

9
推荐指数
2
解决办法
1789
查看次数

对矢量进行排序的最佳方法是什么,使原始矢量保持不变?

正如标题所说,我正在寻找一种方法来对矢量进行排序,而无需修改原始矢量.我的第一个想法当然是在排序之前创建一个向量副本,例如:

std::vector<int> not_in_place_sort(const std::vector<int>& original)
{
   auto copy = original;
   std::sort(copy.begin(), copy.end());
   return copy;
}
Run Code Online (Sandbox Code Playgroud)

但是,也许有一种更有效的方法来使用C++标准算法执行排序(可能是sorttransform?的组合)

c++ sorting stl

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

deepcopy是否使用copy-on-write?

我想知道在对可变对象进行深度复制时,python解释器是否在写策略上应用了复制.

另外,我想知道深度复制是否也在不可变对象上执行(但这对我来说似乎很奇怪)

python deep-copy copy-on-write

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

是否有像Android机械化这样的工具?

我正在创建一个Android应用程序,必须在后台进行一些网上冲浪才能为用户提供服务.

我必须连接的网站没有API,它只提供标准的HTTP访问,具有广泛的cookie使用,但(幸运的是)我没有太多的Javascript代码.

我想知道是否有一个类似于Android的python机制化的库,或者是否可以在Android应用程序中使用机械化本身.

android mechanize

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

git svn是dcommit atomic吗?

在我的公司,我们有一个subversion服务器,每个人都在他们的机器上使用subversion.但是我想使用git,在本地提交更改,然后在我准备好时"推"它们.

但是,我无法理解在以下情况下会发生什么.假设我在本地进行了3次git提交,现在我已准备好"推送"subversion服务器上的所有内容.如果我理解正确,git svn dcommit基本上应该在服务器上依次进行3次提交,对吗?但是,如果在此期间(让我们说在第二次和第三次提交之间)另一位同事发出提交,会发生什么?我能想到的场景是:

1)在提交期间git类型的"锁"(甚至可能吗?)subversion服务器,以便我的提交正在原子化,我的同事的一个是在我的之后完成的

2)服务器上的提交历史记录变为mine1-mine2-other-mine3(即使'其他'应该失败,因为我的同事当时没有更新的工作副本).

我认为它是#2,但也许提交速度如此之高,以至于很少成为一个问题.那么#1还是#2?

git-svn

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

非preemtive linux内核上的spin_lock

我在一个具有1个CPU和非预处理Linux内核(2.6.x)的系统上读到,spin_lock调用相当于一个空调用,因此以这种方式实现.

我无法理解:它不应该相当于在互斥上睡一觉吗?即使在非preemtive内核上,中断处理程序仍然可能被执行,或者我可能会调用一个将原始线程置于休眠状态的函数.因此,空的spin_lock调用是"安全的"并不是真的,如果它被实现为互斥锁的话.

有没有我得不到的东西?

mutex locking linux-kernel spinlock

4
推荐指数
3
解决办法
3120
查看次数

使用带有"this"的智能指针

我正在学习使用boost智能指针,但我对一些情况有点困惑.假设我正在实现一个状态机,其中每个状态都由一个更新方法实现.每个州都可以返回自己或创建一个新的状态对象:

struct state
{
    virtual state* update() = 0;  // The point: I want to return a smart pointer here
};

struct stateA : public state
{
    virtual state* update() { return this; }
};

struct stateB : public state
{
    virtual state* update() { if(some condition) return new stateA() else return this; }
Run Code Online (Sandbox Code Playgroud)

};

状态机循环看起来像这样:

while(true)
    current_state = current_state->update();
Run Code Online (Sandbox Code Playgroud)

你能翻译这段代码来使用boost智能指针吗?当谈到"返回这个"部分时,我有点困惑,因为我不知道该怎么做.基本上我觉得返回像"return boost :: shared_ptr(this);"这样的东西是没用的.因为它不安全 我该怎么办?

c++ boost boost-smart-ptr

4
推荐指数
2
解决办法
280
查看次数

声明零大小矢量

以下是什么意思?

struct foo
{
...
char  bar[0];    // Zero size???
};
Run Code Online (Sandbox Code Playgroud)

我问我的同事,他们告诉我这和写作一样void* bar.

据我所知,C指针只是一个4字节的变量(至少在32位机器上).编译器如何知道bar [0]是一个指针(因而长4个字节)?这只是语法糖吗?

c

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