我想打开一个文件进行阅读,即C++方式.我需要能够做到:
文本文件,涉及某种读取线功能.
二进制文件,它提供了一种将原始数据读入char*缓冲区的方法.
如何运行外部程序并使用C传递命令行参数?如果必须使用操作系统API,请包含适用于Windows,Mac和Linux的解决方案.
比如说,我正在制作一款游戏.我有一个小脚本,其工作是加载所有资产并在资产加载时向用户显示进度条.
一个这样的资产是一个包含游戏逻辑的相当大的脚本.也许超过3 MB.
如何向用户显示第二个脚本的加载进度?
编写一个python脚本,它需要找出编写代码块的语言.我可以自己轻松编写,但我想知道解决方案是否已经存在.
Pygments不够,不可靠.
执行SQL查询时,必须清理字符串,否则用户可以在您的网站上执行恶意SQL.
我通常只有一个函数escape_string(blah),它:
\用双转义符(\\)替换escapes ().'用转义的单引号(\')替换单引号().这够了吗?我的代码中有漏洞吗?有没有一个库可以快速可靠地为我做到这一点?
我想在Perl,Java和PHP中看到优雅的解决方案.
由于这个方便的骨架模块,我已经用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) 我正在使用OpenGL创建一个图形用户界面应用程序,其中可以有任意数量的窗口 - "多文档界面"样式.
如果有一个窗口,主循环可能如下所示:
但是当有3个窗口时考虑主循环:
糟糕...现在呈现应用程序的一个帧发生在适当帧率的1/3处.
一种解决方法是只打开一个带有vsync的窗口,其余的带有vsync的窗口关闭.首先在vsync窗口上调用swapBuffers()并绘制一个,然后在每个窗口上绘制其余的窗口和swapBuffers().
这种解决方法在大多数情况下可能看起来很好,但它并非没有问题:
由于每个线程可以绑定一个OpenGL上下文,因此答案是每个窗口有一个线程.
我仍然希望GUI是单线程的,所以3窗口情况的主循环看起来像这样:
(对于每个窗口)
这会有用吗?这个问题表明它不会:
事实证明,窗口彼此"战斗":看起来SwapBuffers调用是同步的并且彼此等待,即使它们在不同的线程中.我正在测量每个窗口的帧到帧时间,并且有两个窗口,这下降到30 fps,有3到20 fps等.
为了调查这个说法我创建了一个简单的测试程序.该程序创建N个窗口和N个线程,每个线程绑定一个窗口,请求每个窗口启用vsync,然后报告帧速率.到目前为止,结果如下:
我想到的另一个想法是:只有一个OpenGL上下文和一个大的帧缓冲区,所有窗口的大小放在一起.
每个帧,每个窗口调用glViewport以在绘制之前设置它们各自的帧缓冲矩形.
完成所有绘图后,在唯一的OpenGL上下文中使用swapBuffers().
我即将调查这种解决方法是否有效.我有一些问题是:
glViewport每帧多次调用吗?这不是glViewport的工作原理.这不是缓冲区交换的工作方式.每个窗口都有一个帧缓冲区.你不能让他们分享一个.缓冲区交换是每个窗口帧缓冲区,上下文一次只能绑定到一个窗口.这是OS级别而不是GLFW的限制.
这个问题表明该算法可能有效:
Activate OpenGL context on window 1
Draw scene in to window 1 …Run Code Online (Sandbox Code Playgroud) 我从这样的字符串构造一个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) 在Perl中,您可以使用system()或``(反引号)执行系统命令.您甚至可以将命令的输出捕获到变量中.但是,这会在后台隐藏程序执行,以便执行脚本的人无法看到它.
通常这很有用,但有时我想看看幕后发生了什么.如何将所执行的命令打印到终端,并将这些程序的输出打印到终端?这.bat相当于"@echo on".