小编and*_*wrk的帖子

你如何用C++打开文件?

我想打开一个文件进行阅读,即C++方式.我需要能够做到:

  • 文本文件,涉及某种读取线功能.

  • 二进制文件,它提供了一种将原始数据读入char*缓冲区的方法.

c++ io file

27
推荐指数
2
解决办法
11万
查看次数

你如何在C中产生另一个进程?

如何运行外部程序并使用C传递命令行参数?如果必须使用操作系统API,请包含适用于Windows,Mac和Linux的解决方案.

c process

27
推荐指数
5
解决办法
5万
查看次数

如何获得下载<script>的进度?

比如说,我正在制作一款游戏.我有一个小脚本,其工作是加载所有资产并在资产加载时向用户显示进度条.

一个这样的资产是一个包含游戏逻辑的相当大的脚本.也许超过3 MB.

如何向用户显示第二个脚本的加载进度?

javascript html5

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

是否有一个库可以检测代码块的源代码语言?

编写一个python脚本,它需要找出编写代码块的语言.我可以自己轻松编写,但我想知道解决方案是否已经存在.

Pygments不够,不可靠.

python

20
推荐指数
3
解决办法
3487
查看次数

发送查询时我需要逃避什么?

执行SQL查询时,必须清理字符串,否则用户可以在您的网站上执行恶意SQL.

我通常只有一个函数escape_string(blah),它:

  • \用双转义符(\\)替换escapes ().
  • '用转义的单引号(\')替换单引号().

这够了吗?我的代码中有漏洞吗?有没有一个库可以快速可靠地为我做到这一点?

我想在Perl,Java和PHP中看到优雅的解决方案.

mysql security oracle

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

你如何用C++扩展python?

由于这个方便的骨架模块,我已经用C成功扩展了python .但我找不到一个C++,并且在尝试修复C++在编译这个骨架模块时给出的错误时,我遇到循环依赖性问题.

如何使用C++扩展Python?

如果我不需要,我宁愿不依赖Boost(或SWIP或其他库).依赖性是一种痛苦.最好的情况,我发现一个已经用C++编译的框架文件.

这是我为C++编写的编辑骨架:

#include <Python.h>

#include "Flp.h"

static PyObject * ErrorObject;

typedef struct {
    PyObject_HEAD
    PyObject * x_attr; // attributes dictionary
} FlpObject;

static void Flp_dealloc(FlpObject * self);
static PyObject * Flp_getattr(FlpObject * self, char * name);
static int Flp_setattr(FlpObject * self, char * name, PyObject * v);
DL_EXPORT(void) initflp();

static PyTypeObject Flp_Type = {
    /* The ob_type field must be initialized in the module init function
     * to be portable to Windows without using C++. …
Run Code Online (Sandbox Code Playgroud)

c++ python

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

多个OpenGL上下文,多个窗口,多线程和vsync

我正在使用OpenGL创建一个图形用户界面应用程序,其中可以有任意数量的窗口 - "多文档界面"样式.

如果有一个窗口,主循环可能如下所示:

  1. 处理事件
  2. 画()
  3. 交换缓冲区(vsync导致此阻塞,直到垂直监视器刷新)

但是当有3个窗口时考虑主循环:

  1. 每个窗口处理事件
  2. 每个窗口绘制()
  3. 窗口1交换缓冲区(阻塞直到vsync)
  4. (一段时间之后)窗口2交换缓冲区(阻塞直到vsync)
  5. (一段时间之后)窗口3交换缓冲区(阻塞直到vsync)

糟糕...现在呈现应用程序的一个帧发生在适当帧率的1/3处.

解决方法:实用程序窗口

一种解决方法是只打开一个带有vsync的窗口,其余的带有vsync的窗口关闭.首先在vsync窗口上调用swapBuffers()并绘制一个,然后在每个窗口上绘制其余的窗口和swapBuffers().

这种解决方法在大多数情况下可能看起来很好,但它并非没有问题:

  • 有一个窗口是特殊的是不优雅的
  • 竞争条件仍然可能导致屏幕撕裂
  • 某些平台会忽略vsync设置并强制它启用
  • 我读到切换哪个OpenGL上下文绑定是一项昂贵的操作,应该避免.

解决方法:每个窗口一个线程

由于每个线程可以绑定一个OpenGL上下文,因此答案是每个窗口有一个线程.

我仍然希望GUI是单线程的,所以3窗口情况的主循环看起来像这样:

(对于每个窗口)

  1. 锁定全局互斥锁
  2. 处理事件
  3. 画()
  4. 解锁全局互斥锁
  5. swapBuffers()

这会有用吗?这个问题表明它不会:

事实证明,窗口彼此"战斗":看起来SwapBuffers调用是同步的并且彼此等待,即使它们在不同的线程中.我正在测量每个窗口的帧到帧时间,并且有两个窗口,这下降到30 fps,有3到20 fps等.

为了调查这个说法我创建了一个简单的测试程序.该程序创建N个窗口和N个线程,每个线程绑定一个窗口,请求每个窗口启用vsync,然后报告帧速率.到目前为止,结果如下:

  • Linux,X11,4.4.0 NVIDIA 346.47(2015-04-13)
    • 无论打开多少个窗口,帧速率都是60fps.
  • OSX 10.9.5(2015-04-13)
    • 帧率没有上限; 交换缓冲区没有阻塞.

解决方法:只有一个上下文,一个大帧缓冲区

我想到的另一个想法是:只有一个OpenGL上下文和一个大的帧缓冲区,所有窗口的大小放在一起.

每个帧,每个窗口调用glViewport以在绘制之前设置它们各自的帧缓冲矩形.

完成所有绘图后,在唯一的OpenGL上下文中使用swapBuffers().

我即将调查这种解决方法是否有效.我有一些问题是:

  • 有这么大的帧缓冲区会没问题吗?
  • 可以glViewport每帧多次调用吗?
  • 我正在使用的窗口库API是否允许我创建独立于窗口的OpenGL上下文?
  • 如果窗户的尺寸都不同,框架缓冲区会浪费空间吗?

卡米拉伯格伦德的维护者GLFW说:

这不是glViewport的工作原理.这不是缓冲区交换的工作方式.每个窗口都有一个帧缓冲区.你不能让他们分享一个.缓冲区交换是每个窗口帧缓冲区,上下文一次只能绑定到一个窗口.这是OS级别而不是GLFW的限制.

解决方法:只有一个上下文

这个问题表明该算法可能有效:

Activate OpenGL context on window 1  
Draw scene in to window 1 …
Run Code Online (Sandbox Code Playgroud)

opengl multithreading

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

将UTC中的QDateTime转换为本地系统时间

我从这样的字符串构造一个QDateTime:

QDateTime date = QDateTime::fromString("2010-10-25T10:28:58.570Z", "yyyy-MM-ddTHH:mm:ss.zzzZ");
Run Code Online (Sandbox Code Playgroud)

我知道这date是在UTC中,因为这是它的存储方式.但是,当我想向用户显示此日期时,它应该在用户的本地时区.date.toLocalTime()看起来很有希望,但它返回完全相同的日期!

如何转换date为系统的本地时间以显示给用户?

这是一些更多的失败:

#include <QtCore/QCoreApplication>
#include <QtCore/QDateTime>
#include <QtCore/QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QDateTime date = QDateTime::fromString("2010-10-25T10:28:58.570Z", "yyyy-MM-ddTHH:mm:ss.zzzZ");
    QDateTime local = date.toLocalTime();

    qDebug() << "utc: " << date;
    qDebug() << "local: " << local.toString();
    qDebug() << "hax: " << local.toString(Qt::SystemLocaleLongDate);

    return a.exec();
}
Run Code Online (Sandbox Code Playgroud)

输出:

utc:  QDateTime("Mon Oct 25 10:28:58 2010")
local:  "Mon Oct 25 10:28:58 2010"
hax:  "Monday, October 25, 2010 10:28:58 AM"
Run Code Online (Sandbox Code Playgroud)

c++ qt qt4

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

你如何在Perl中创建对象?

Perl具有OOP功能,但它们很少使用.如何使用方法和属性创建和使用Perl对象?

oop syntax perl

12
推荐指数
4
解决办法
4463
查看次数

Perl的system()如何打印它正在运行的命令?

在Perl中,您可以使用system()或``(反引号)执行系统命令.您甚至可以将命令的输出捕获到变量中.但是,这会在后台隐藏程序执行,以便执行脚本的人无法看到它.

通常这很有用,但有时我想看看幕后发生了什么.如何将所执行的命令打印到终端,并将这些程序的输出打印到终端?这.bat相当于"@echo on".

perl system

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

标签 统计

c++ ×3

perl ×2

python ×2

c ×1

file ×1

html5 ×1

io ×1

javascript ×1

multithreading ×1

mysql ×1

oop ×1

opengl ×1

oracle ×1

process ×1

qt ×1

qt4 ×1

security ×1

syntax ×1

system ×1