小编Phi*_*ipp的帖子

重新学习opengl

10年前,我做了一些游戏编程,并使用OpenGL作为3D图形部分.这不是什么好东西,只是一些脚本小子试图制作游戏:-)

现在我需要可视化场景以测试图像处理算法.我想知道:这10年里有什么变化?(我猜很多?)NeHe仍然是一个很好的来源还是已经过时了?是否有足够的资源来缩小差距?

谢谢!

c++ opengl

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

打开设置屏幕以激活输入法

我写了一个自定义输入法(软键盘).我可以根据这篇文章检查它是否已启用.现在,如果它已启用(但不是当前的IME),我可以调用imeManager.showInputMethodPicker();哪个显示启用的IME列表,以便用户可以选择我的.

但是,如果我的IME未在系统设置中启用,我宁愿将用户直接带到系统设置屏幕,这样他就可以启用我的IME(我记得Swiftkey在安装后执行此操作).

如何打开此特定设置屏幕?

android input

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

通过 API 访问 OneDrive 个人保管库

微软在 OneDrive 中引入了一个特殊的文件夹(我只在个人 OneDrive 帐户中看到它,在 OneDrive for Business 中没有看到),称为“Personal Vault”。我搜索了MS Graph API文档,但找不到提到的。

所以我的问题是:有没有什么办法可以作为第三方应用程序访问这个个人保险库?

microsoft-graph-api

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

"Visual Studio中的模板参数无效"错误,但不是GCC

假设你有代码

template <template<class> class BaseType>
class EST16
    : public BaseType<int>
{
public:
    EST16(double d) 
    {
    }
};

template <class T>
class SCEST
{
    T y;
};
typedef EST16<SCEST> EST16_SC;
class Child
    : public EST16_SC
{
public:
    Child()
        : EST16_SC(1.0)
    {
    }

};



class NotWorkingChild
    : public EST16<SCEST>
{
public:
    NotWorkingChild()
        : EST16<SCEST>(1.0)
    {
    }

};



TEST(TemplateTest, TestInstantiate)
{
    Child child;
    NotWorkingChild notWorkingChild; 
}
Run Code Online (Sandbox Code Playgroud)

Child和NotWorkingChild仅因typedef而异.在GCC中都编译,在Visual Studio中NotWorkingChild的构造函数产生以下错误:

2>..\..\..\src\itenav\test\SCKFErrorStateTest.cpp(43) : error C3200: 'SCEST<T>' : invalid template argument for template parameter 'BaseType', expected a …
Run Code Online (Sandbox Code Playgroud)

c++ gcc templates visual-studio

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

传递给方法时,我应该将shared_ptr转换为weak_ptr吗?

关于这个主题已经有几个问题,但我仍然不确定该怎么做:我们的代码库shared_ptr在许多地方使用.我必须承认,在编写时我们没有明确定义所有权.

我们有一些方法

 void doSomething(shared_ptr<MyClass> ptr)
 {
      //doSomething() is a member function of a class, but usually won't store the ptr
      ptr->foo();
      ...
 }
Run Code Online (Sandbox Code Playgroud)

在发现了第一个(间接的)循环依赖之后,我想纠正我们设计中的错误.但我不确定如何.从上面改变方法有什么好处

 void doSomething(weak_ptr<MyClass> ptr)
 {
      shared_ptr<MyClass> ptrShared = ptr.lock();
      ptrShared->foo();
      ...
 }
Run Code Online (Sandbox Code Playgroud)

我也很困惑,因为有些人说(包括谷歌风格指南),首先要确保所有权的正确性(这可能意味着引入许多weak_ptrs,例如在上述方法的例子中,但对许多成员变量也是如此)我们有).其他人说(请参阅下面的链接)你应该使用weak_ptr来打破循环依赖.但是,检测它们并不总是很容易,所以我想我是否真的应该使用shared_ptr,直到我遇到问题(并实现它们),然后修复它们?

谢谢你的想法!

也可以看看

c++ shared-ptr

8
推荐指数
2
解决办法
7075
查看次数

在 CMake 中生成步骤后运行命令

我有一个命令行工具,应该在 CMake 创建我的 .sln 文件后运行。有没有办法使用 CMake 做到这一点?

在 CMakeLists.txt 的末尾使用 execute_process(COMMAND ..) 没有帮助,因为这是在 Configure 步骤之后执行的,但是 .sln 文件是在生成步骤中创建的。

非常感谢!

cmake

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

内核模块和SCHED_RR线程的优先级

我有一个嵌入式Linux平台(Beagleboard,运行Angstrom Linux),连接了两个设备:

  • 通过USB连接的激光测距仪(Hokuyo UTM 30)
  • 通过SPI连接的定制外部板

我们有一个Linux内核模块,负责SPI数据传输.它有一个IRQ处理程序,在其中调用spi_async,从而导致调用异步回调方法.

我的C++应用程序包含三个线程:

  • 数据处理的主线程
  • 激光轮询线
  • 一个SPI轮询线程

我遇到的问题似乎是由上述模块如何相互作用引起的.

  • 当我关闭USB设备(激光测距仪)时,我正确接收所有SPI消息(每3ms一条消息,消息长度除以数据速率<1ms),独立于线程调度
  • 当我打开USB设备并运行我的程序时,正常的线程调度(SCHED_OTHER,优先级0,没有很好的级别设置)大约1%的消息"丢失",因为spi_async的回调方法在下一个IRQ发生时运行(我可以区别对待这种情况,以免丢失消息,所以这不是一个大问题.)
  • 打开USB设备后,我用SCHED_RR运行程序

    • 主线程的优先级= 10
    • SPI读取线程的优先级= 10
    • USB /激光轮询线程的优先级= 4

    然后我丢失了40%的消息,因为在调用spi-callback方法之前再次触发IRQ!(我仍然可以找到解决方法,但问题是我需要快速响应时间,在这种情况下无法再达到).我需要使用线程调度和激光设备,所以我正在寻找一种方法来解决这种情况.

问题1:

我的假设是IRQ处理程序和内核空间中spi_async触发的回调比用户空间中运行的任何线程(无论是SCHED_RR还是SCHED_OTHER)具有更高的优先级.这意味着在我的应用程序中转向SCHED_RR不应该减慢SPI传输速度,但这似乎非常错误.是吗?

问题2:

我怎样才能确定这里发生了什么?哪些调试辅助工具存在?(或者您可能不需要任何进一步的信息?)对我来说,主要的问题是:为什么我只在打开激光设备时才会遇到问题.USB驱动程序会消耗这么多时间吗?

-----编辑:

我做了以下观察:

spi_async的回调调用wake_up_interruptible(&mydata->readq);(with wait_queue_head_t readq;).从用户空间(我的应用程序)我调用一个函数导致poll_wait(file, &mydata->readq, wait);轮询返回用户空间调用read().

  • 当我的应用程序运行时,SCHED_OTHER我可以看到回调方法首先read()在我的内核模块中输入方法之前完成.
  • 当我的应用程序运行时,退出回调之前SCHED_RR输入了read .

这似乎证明了用户空间线程的优先级高于回调方法的上下文优先级.有没有办法改变这种行为,仍然有SCHED_RR我的应用程序的线程?

c c++ linux scheduling real-time

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

基于稀疏矩阵的二次型矩阵乘法算法

我正在优化代码,它严重依赖于定制的Matrix库(不会从项目中排除它,因为它无处不在.这不好,但它是一个事实......)许多计算是用10-的矩阵完成的20行和列,许多计算包括二次形式

 C = A*B*A'
Run Code Online (Sandbox Code Playgroud)

我意识到A经常是稀疏的,我想利用这个事实.所以我正在寻找一种能够处理这种情况的算法.数值稳定性很重要.有什么我可以用的吗?(我没有写我们的图书馆所以我不知道我是否应该考虑到任何陷阱?)

由于"我们的"简单O(n ^ 3)乘法在目标平台上执行速度比本征3快,因为我需要数值稳定性且矩阵不是很大,我猜Strassen的算法以及Coppersmith-Winograd算法都不是我正在寻找什么.相反,它只是二次形式乘法,让我可以轻松地检查A中的零.

谢谢你的任何建议!

c++ algorithm math sparse-matrix

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

boost :: TIME_UTC(_)具有不同的boost版本

我刚刚将Windows上的项目从boost 1.46升级到当前的1.52升级.我们根据 https://svn.boost.org/trac/boost/ticket/6940boost::TIME_UTC更改了一些用法.boost::TIME_UTC_

但是,我们还在一些linux机器上使用boost 1.49来构建源代码,它不知道boost::TIME_UTC_.有没有建议的方法使用boost 1.49和1.52与TIME_UTC并行?

c++ boost

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

我应该实现onRetainNonConfigurationInstance吗?

我刚刚阅读了关于维护我的Android应用程序的状态并偶然发现了onRetainNonConfigurationInstance.但在阅读文档时,我注意到了这句话:

此函数纯粹称为优化,您不能依赖它被调用.

所以我想知道:什么时候使用这种方法真的很有意义.如果我不能依赖它被调用,我还需要另一种机制来传输状态(在我的情况下,这将是一些序列化).因此,除非我遇到任何性能命中,否则我有理由选择onRetainNonConfigurationInstance吗?

如果保证可以使用它,我会喜欢使用它,但如果不是,它似乎没用.

我错过了什么吗?你什么时候使用这种方法?你会如何保持网络连接或类似的东西?

谢谢!

android state

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