小编Max*_*iso的帖子

正确处理重新加载并从AppletViewer重新启动

当我的applet第一次从干净的环境启动时,事情按照我期望的方式工作.我产生了两个线程,一个用于通用处理,一个用于图形.我从事件调度线程执行所有GUI操作调用.从appletviewer正确处理启动/停止,但不重启/重新加载.我drawCanvas在Applet的内容窗格中将Canvas称为唯一的Component,我使用双缓冲来绘制它.

我在这里观察问题:

public void start() {   
    /* ... some stuff  */
    executeOnEDTAndWait( 
        new Thread() {
            @Override 
            public void run() {
                /* ... more stuff ... */
                setupDrawCanvas();

                if( drawCanvas.isDisplayable() ) {
                    drawCanvas.createBufferStrategy(2); 
                    /* ... some more stuff */
                } else {
                    /* This is where it runs into difficulties */
                }
    /* ... */
Run Code Online (Sandbox Code Playgroud)

在哪里setupDrawCanvas定义如下:

private void setupDrawCanvas() {
    setVisible(false);
    setIgnoreRepaint(true);

    getContentPane().removeAll();

    drawCanvas = new Canvas();

    drawCanvas.setName("drawCanvas");
    drawCanvas.setSize(
    newDrawCanvasDimension.width, 
    newDrawCanvasDimension.height);
    drawCanvas.setIgnoreRepaint(true);

    getContentPane().add(drawCanvas);

    getContentPane().setVisible(true);
    drawCanvas.setVisible(true);
    setVisible(true);
} …
Run Code Online (Sandbox Code Playgroud)

java applet swing multithreading awt

12
推荐指数
1
解决办法
1663
查看次数

使用 Microsoft 编译器生成 CMOV 指令

为了在运行 Windows 7 pro 的英特尔核心 2 上执行一些 cmov 指令,我编写了下面的代码。它所做的只是从控制台获取一个字符串作为输入,应用一些移位操作来生成一个随机种子,然后将该种子传递给 srand,以生成一个小的伪随机数数组。然后评估伪随机数是否满足谓词函数(更任意的 bitshuffling ),并输出“*”或“_”。实验的目的是生成 cmov 指令,但是正如您在下面的反汇编中看到的那样,没有。

关于如何更改代码或 cflags 以便生成它们的任何提示?

#include <iostream>
#include <algorithm>
#include <string>
#include <cstdlib>

bool blackBoxPredicate( const unsigned int& ubref ) {
   return ((ubref << 6) ^ (ubref >> 2) ^ (~ubref << 2)) % 15 == 0;
}

int main() {
   const unsigned int NUM_RINTS = 32;
   unsigned int randomSeed = 1;
   unsigned int popCount = 0;
   unsigned int * rintArray = new unsigned int[NUM_RINTS];
   std::string userString;

   std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ x86 assembly disassembly visual-c++

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

_Alignas用于使用clang和C11的struct成员

我在使用C11和结构的-Wpadded时遇到了一些麻烦.

我已经阅读了与_Alignas的Structure成员对齐,我查看了clang文档并看到它现在得到了支持.

另外,我正在使用我最近从trunk构建的一个非常新版本的clang.

$ clang --version
clang version 3.3 (trunk 175473)
Target: x86_64-unknown-linux-gnu
Thread model: posix
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是:

#include <stdlib.h>
#include <stdalign.h>

struct foo{
   void* a;
   int b;
};

int main() {
   struct foo instance;

   instance.a = NULL;
   instance.b = 2;

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

这引发了我的警告:

$ clang -Weverything -std=c11 t.c 
t.c:4:8: warning: padding size of 'struct foo' with 4 bytes to alignment boundary [-Wpadded]
struct foo{
       ^
1 warning generated.
Run Code Online (Sandbox Code Playgroud)

现在不是这个_Alignas是为了什么?我尝试将它放在int成员声明之前,如下所示:

struct foo{
   void* a;
   _Alignas(void*) int …
Run Code Online (Sandbox Code Playgroud)

c compiler-construction struct c11

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

使用 GLUT 时避免全局变量

GLUT 是一个很棒的 AP​​I,它非常易于使用,但我在处理范围方面遇到了一些困难。在定义回调时,没有传递参数的选项,所以在我看来好像程序员被迫依赖全局变量,我发现这很难接受。现在我在它自己的模块中拥有所有的 GLUT 代码,在它自己的线程上运行,并定义一个静态指针,我在入口点分配给模块,如下所示:

主模块

int main( int argc, char** argv ) {
    int foo;
    boost::thread graphicsThread(glutMain, argc, argv, &foo);

    //...

    graphicsThread.join();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

GLUT 模块

static int* FOO_REF;

int glutMain( int argc, char** argv, int* foo ) {
    FOO_REF = foo;
    glutInit(&argc, argv);
    //etc...
Run Code Online (Sandbox Code Playgroud)

还有比这更好的解决方案吗?

c++ glut scope

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

Microsoft Visual Studio 2010 没有将构建工具放入干净目标的路径中?

我已将 Microsoft Visual Studio 配置为使用 Makefile 配置类型,并编写了一个 makefile 来使用 Microsoft 工具构建我的项目。在项目配置的 NMake 部分下,我将构建命令行设置为 build.bat,该文件只是使用我的 makefile 作为命令行参数来调用 nmake,如下所示:

nmake /nologo /f makefile.x86.winnt.msvc2010
Run Code Online (Sandbox Code Playgroud)

这很好用。

为了进行清理,我在 makefile 中编写了一个目标,该目标会删除所有构建工件。它看起来像这样:

#... the rest of the makefile
clean:
    @erase /f /q $(OBJS) $(OUT) $(MAPFILE) $(PDBFILE)
    @echo + clean
Run Code Online (Sandbox Code Playgroud)

因此,我将 clean 命令行设置为以 clean 作为参数的 nmake 调用。像这样:

nmake /nologo /f makefile.x86.winnt.msvc2010 clean
Run Code Online (Sandbox Code Playgroud)

我将此文本放入 clean.bat 并将其设置为“清理命令行”,但它不起作用,因为调用 shell 无法找到 nmake。我检查了 clean 调用时的路径,MSVS 不包含用于清理的路径中的构建工具(包括 nmake)。(请注意,在 PATH 中有 nmake 的 shell 中运行上述 nmake 命令会成功)。

如何让 MSVS 将构建工具包含在 PATH 中,以便我可以在 clean 命令行中调用 nmake?或者有更好的解决方案吗?

c++ nmake makefile visual-studio-2010

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

Ruby REPL的最后一个结果

在Scala REPL中,如果您评估某些内容,则其值存储在res {N}中,如下所述:如何在Scala REPL中访问最后一个结果?.ruby REPL是否有类似的功能,或者如果你没有在变量中捕获它们的值,结果是否会丢失?

ruby scope irb read-eval-print-loop

3
推荐指数
1
解决办法
198
查看次数