小编Sef*_*efu的帖子

如何在Python 3中从字节缓冲区构建内存中的TarFile对象?

是否可以使用包含tar数据的缓冲区在内存中创建TarFile对象,而无需将TarFile写入磁盘并再次打开它?我们得到通过套接字发送的字节.

像这样的东西:

import tarfile
byte_array = client.read_bytes()
tar = tarfile.open(byte_array) # how to do this?
# use "tar" as a regular TarFile object
for member in tar.getmembers():
    f = tar.extractfile(member)
    print(f)
Run Code Online (Sandbox Code Playgroud)

注意:执行此操作的原因之一是我们最终希望能够同时使用多个线程执行此操作,因此如果两个线程同时尝试执行此操作,则可能会覆盖临时文件.

感谢您的帮助!

python file tar tarfile python-3.x

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

WebGL中的索引缓冲区?

我正在尝试学习一些WebGL(来自本教程http://learningwebgl.com/blog/?page_id=1217).我按照指南,现在我正在尝试实现自己的演示.我想创建一个图形对象,其中包含要在场景中显示的每个单独对象的缓冲区和数据.目前,我有一个位置顶点缓冲区,一个纹理坐标缓冲区和一个法线缓冲区.在本教程中,他使用另一个缓冲区,一个索引缓冲区,但仅用于多维数据集.实际上索引缓冲区是什么?我应该实现它,它对除立方体以外的任何东西有用吗?

javascript graphics html5 opengl-es webgl

12
推荐指数
2
解决办法
3654
查看次数

如何从c ++中的父指针调用子方法?

我有一个基类和一个扩展它的子类.子类在父类中没有自己的方法.也就是说,在基类中将其声明为虚拟实际上并不是一种选择.

class A {
  public:
    virtual void helloWorld();
};

class B : public A {
  public:
    virtual void helloWorld();
    void myNewMethod();
};
Run Code Online (Sandbox Code Playgroud)

然后,在我的实现中,我有一个指向A的指针,我将其构造为B:

// somewhere in a .cpp file
A* x;
x = new B();
x->myNewMethod(); // doesn't work
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案是施展它:

((B *)x)->myNewMethod();
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有一种更清洁的方式来做到这一点,或者正在推行方式?

c++ polymorphism inheritance

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

USB存储驱动程序如何在Linux中运行?

我试图找出USB存储驱动程序在Linux中如何工作的高级概述.我正在寻找一篇简单的文章,甚至是描述它是如何工作的图片/流程图.

基本上,我希望得到这些问题的答案:

将设备插入计算机时会发生什么?是否有一个守护程序可以接收它,或者该事件是否会在某处触发中断?在将控制权交给USB存储驱动程序之前,核心USB驱动程序是否会读取有关设备的信息?它如何决定它是什么类型的设备?如何安装设备,以及允许它与计算机的文件系统通信的是什么?当我复制文件时,内核中的数据流是什么样的?

我希望问题不是太模糊 - 我试过谷歌无济于事,所以我想知道是否有人知道任何可以解释这一点的文章或图表,或者他们是否可以自己解释它而不需要太多努力.谢谢.

linux usb kernel module driver

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

如何在Winsock2 C++中停止/重新启动服务器套接字上的侦听和接受?

我在Visual Studio Pro C++中创建了一个套接字(Winsock2)来监听端口上的连接(TCP).它工作得很好,但我让它在自己的线程中运行,我希望能够关闭它,希望以后重新启动它.我可以毫无问题地终止线程,但这样做并不会阻止套接字接受新客户端(也就是说,它在我关闭线程之前就已经接受了它所做的接受).我可以将新客户连接到它但没有任何反应......它只是接受而且就是这样.我想要的是阻止它听取和接受,然后能够告诉它稍后在同一个端口再次启动.现在尝试重新启动它只是告诉我端口已经被占用.

这是listen线程函数:

DWORD WINAPI ListeningThread(void* parameter){
TCPServer *server = (TCPServer*)parameter;

try{
    server = new TCPServer(listen_port);
}catch(char* err){
    cout<<"ERROR: "<<err<<endl;
    return -1;
}

int result = server->start_listening();
if(result < 0){
    cout<<"ERROR: WSA Err # "<<WSAGetLastError()<<endl;
    return result;
}
cout<<"LISTENING: "<<result<<endl<<endl;
while(true){
    TCPClientProtocol *cl= new TCPClientProtocol(server->waitAndAccept());
    HANDLE clientThread = CreateThread(0, 0, AcceptThread, cl, 0, 0);
    cout<<"Connection spawned."<<endl;
}

return 0;
}
Run Code Online (Sandbox Code Playgroud)

以下是TCPServer中的相关功能:

TCPServer::TCPServer(int port){
listening = false;
is_bound = false;

//setup WSA
int result = WSAStartup(MAKEWORD(2, 2), (LPWSADATA) &wsaData); …
Run Code Online (Sandbox Code Playgroud)

c++ listen winsock2

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

如何获得Windows线程的返回值?

我只是想知道是否有可能(如果是这样,如何)在C++(Windows)中获取线程的返回值.我有几个线程,我使用WaitForMultipleObjects(...)它们.这等待一个线程完成,并返回所述线程的索引,一切都很好.但是,我希望能够获得使用其句柄完成的线程的返回值.

例如:

DWORD WINAPI Thread1(void *parameter){
    ...
    if(...) return 0;
    else return -1;
}

DWORD WINAPI Thread2(void *parameter){
    ...
    if(...) return 1;
    else return 0;
}

int main(){
    HANDLE t1 = CreateThread(0, 0, Thread1, NULL, 0, 0);
    HANDLE t2 = CreateThread(0, 0, Thread2, NULL, 0, 0);
    HANDLE *threads = new HANDLE[2];
    threads[0] = t1;
    threads[1] = t2;
    int result = WaitForMultipleObjects(2, threads, false, INFINITE);
    if(result == 0){
        //get the threads value here:
        int retVal = SomeFunction(t1); //What is …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi multithreading return-value

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

如何让HTML5画布全屏显示?

我已经看过很多这方面的教程,看起来很简单.我想要的只是让我的HTML5画布元素全屏显示(如全屏全屏,占用整个显示器).

这是我的HTML:

<p><canvas id="screen" width="800" height="500"
    style="background: #FFFFFF; border: 5px solid black;" role="img">
        Your browser does not support the canvas element.
</canvas></p>

<p><a href="javascript:goFullScreen();">Go Fullscreen</a></p>
Run Code Online (Sandbox Code Playgroud)

这是我的Javascript(在自己的.js文件中):

function goFullScreen(){
    var canvas = document.getElementById("screen");
    if(canvas.requestFullScreen)
        canvas.requestFullScreen();
    else if(canvas.webkitRequestFullScreen)
        canvas.webkitRequestFullScreen();
    else if(canvas.mozRequestFullScreen)
        canvas.mozRequestFullScreen();
}
Run Code Online (Sandbox Code Playgroud)

我测试了这个功能; 它被调用,并且三个ifs中的一个(即,因为我使用Firefox,mozRequestFullScreen)被调用.我的浏览器会在我测试过的每个演示中打开它,但不会在我自己的代码中打开它.

什么是缺失的变量?我必须用谷歌搜索每一个提到这个的链接,但仍然没有.谢谢.

javascript html5 canvas fullscreen html5-canvas

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

IE9中的"SCRIPT5039:const属性的重新声明"

这已被问过,但那里的解决方案对我没有帮助.这究竟是什么意思?我的常规HTML页面使用"script"标记来加载我的main_script.js文件,我做的第一件事就是:

var internetExplorerSucks = 30;
Run Code Online (Sandbox Code Playgroud)

使用的变量称为FPS,但我认为它可能是由一些随机的默认全局变量,因此我将其重命名为显然尚未采用的内容.它仍然无法工作.我在IE调试控制台中收到此错误:

SCRIPT5039: Redeclaration of const property 
main_script.js, line 1 character 1
Run Code Online (Sandbox Code Playgroud)

我尝试通过取出"var"使它成为一个全局,仍然没有奏效.应该注意的是,这不是任何函数,只是字面上文件中的第一行代码.

一些背景知识:所有这些代码都适用于Windows,OS X和Linux上的Chrome,Firefox和Safari.IE是唯一不起作用的浏览器.这个项目涉及使用HTML5画布,我至少在IE 9中显示(我使用的是版本9),但这段代码根本不属于画布.实际上,我似乎无法在main_script.js文件中声明任何变量.但是,我能够创建函数而不会遇到错误.那是我要做的吗?把所有东西放在一个函数中(这将涉及很多移动的东西)?

无论如何,谢谢你的帮助.

PS Internet Explorer是一场噩梦.

html javascript internet-explorer internet-explorer-9

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

如何使用g ++(Ubuntu)编译OpenAL程序?

我试图找到一种方法让OpenAL在我的电脑上工作:

Ubuntu 12.10 (running on 2010 intel i7 Macbook Pro)
Run Code Online (Sandbox Code Playgroud)

我从终端安装了OpenAL库:

$ sudo apt-get install libopenal-dev
Run Code Online (Sandbox Code Playgroud)

一切顺利.现在我尝试创建一个简单的C++程序,其中包含库:

#include <iostream>
#include <AL/alut.h>

using namespace std;

int main(){
    cout << "Hello, world" << endl;
}
Run Code Online (Sandbox Code Playgroud)

无论我怎么努力,我最接近找到如何使用g ++编译它是:

$ g++ test.cpp -lalut 
Run Code Online (Sandbox Code Playgroud)

这会出现以下错误:

test.cpp:2:21: fatal error: AL/alut.h: No such file or directory
compilation terminated.
Run Code Online (Sandbox Code Playgroud)

关于如何将OpenAL链接到我的项目的任何想法?我花了几个小时在谷歌上,答案似乎不存在.我可能做了一些根本错误的事情,因为我对Linux c ++开发不熟悉.谢谢.

编辑:更改以供参考:

$ g++ -lalut test.cpp
Run Code Online (Sandbox Code Playgroud)

$ g++ test.cpp -lalut
Run Code Online (Sandbox Code Playgroud)

(后面是正确的做法,我发错了).

c++ linux ubuntu linker openal

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

如何让asm跳转到c中的变量地址?

现在,我在 c 中调用带有内联汇编的跳转指令,如下所示:

int register eax asm("eax") = addr; // addr is a memory address
asm("jmp *%eax");
Run Code Online (Sandbox Code Playgroud)

我想这样做而不必设置任何其他寄存器值(例如我想做的是这样的):

asm("jmp *(addr)");
Run Code Online (Sandbox Code Playgroud)

这样做的正确方法是什么?也就是说,如何将 ac 变量“插入”到 asm 调用中?

Ubuntu 12.04 64 位,Intel x86 64 位处理器,gcc 版本 4.7.4。

c linux x86 assembly inline-assembly

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