我有一些Node.js代码尝试更新数据库,如下所示:
connection.query(command, function(err,rows) {
if (err){
console.log(command);
console.log("ERROR");
console.log(err);
return;
}
console.log("good");
});
Run Code Online (Sandbox Code Playgroud)
以上针对"命令"的不同值重复运行,从而对数据库生成不同的查询.问题是,当出现错误时,错误的查询将被打印出来console.log(command).这是因为查询添加到队列的时间以及查询实际执行的时间不同,因此每次这些时间的"命令"值都不相同.有没有解决的办法?
注意:console.log(err)打印错误本身,也是查询的一部分,但它只打印发生错误的行.我想打印整个查询.
我有一个可以在显示器上渲染的 3D 场景。然而,除了渲染它以显示之外,我还希望能够将渲染的场景(例如每 100 帧一次)导出为图像(例如 JPG 或 PNG 图像),也许将其保存为文件在我的某个位置机器。
do{
glfwPollEvents();
glBindFramebuffer(GL_FRAMEBUFFER, framebuffername);
drawScene();
glDrawArrays(GL_TRIANGLES, 0, (GLsizei)vertices.size());
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTexture, 0);
image = (GLuint*)malloc(windowWidth * windowHeight);
glReadPixels(0, 0, windowWidth, windowHeight, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, &image);
free(image);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
drawScene();
glfwSwapBuffers(window);
} // Check if the ESC key was pressed or the window was closed
while( glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS &&
glfwWindowShouldClose(window) == 0 );
Run Code Online (Sandbox Code Playgroud)
我想做的是将场景渲染到显示器以及我定义的帧缓冲区对象。上面的崩溃并给我一个奇怪的 Visual Studio 错误:“ig75icd64.pdb 未加载”。但如果我注释掉这一行:
glReadPixels(0, 0, windowWidth, windowHeight, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, &image);
Run Code Online (Sandbox Code Playgroud)
然后程序不会崩溃,并且它会正确渲染到显示器(但我希望能够使用 glReadPixels 写入 2d …
我可能未正确输入标题,但在以下示例中更容易解释,然后有人可以编辑标题。
考虑以下代码片段:
#include <iostream>
#include <memory> // for std::unique_ptr
class Resource
{
public:
Resource() { std::cout << "Resource acquired\n"; }
~Resource() { std::cout << "Resource destroyed\n"; }
};
int main()
{
Resource* res = new Resource;
std::unique_ptr<Resource> res1(res); // Resource created here
delete res;
std::cout << "res1 is " << (static_cast<bool>(res1) ? "not null\n" : "null\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
打印:
$ ./a.out
Resource acquired
Resource destroyed
res1 is not null
Resource destroyed
Run Code Online (Sandbox Code Playgroud)
我们创建了动态分配的资源,然后创建了拥有此资源的唯一指针(res1)。唯一指针使我们不必担心必须手动删除资源。
但是,让我们假设像上面的代码一样,我们还是手动删除了资源(之后没有将其设置为null)。然后,当res1超出范围时,难道不是要删除已经被释放的东西吗?
typedef vector<int> vec;
struct classcomp {
bool operator() (const vec& vec1, const vec& vec2) const{
if (vec1[0] > vec2[0]){
return true;
}
return false;
}
};
int main() {
set<vec, classcomp> v;
for (int i = 0; i < 20; i++) {
v.insert({rand() % 20, i});
}
cout << "size: " << v.size() << endl;
for (auto e : v) {
cout << e[0] << " " << e[1] << endl;
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的 C++ 代码中,我定义了一个自定义比较器和一组有序向量,该向量根据向量的第一个条目进行排序。我知道该集合不存储重复项,但我插入了 20 个不同的向量(每个向量的第二个条目都是唯一的),但我的集合的大小只有 14。这是为什么?