当我的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) 为了在运行 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) 我在使用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) GLUT 是一个很棒的 API,它非常易于使用,但我在处理范围方面遇到了一些困难。在定义回调时,没有传递参数的选项,所以在我看来好像程序员被迫依赖全局变量,我发现这很难接受。现在我在它自己的模块中拥有所有的 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)
还有比这更好的解决方案吗?
我已将 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?或者有更好的解决方案吗?
在Scala REPL中,如果您评估某些内容,则其值存储在res {N}中,如下所述:如何在Scala REPL中访问最后一个结果?.ruby REPL是否有类似的功能,或者如果你没有在变量中捕获它们的值,结果是否会丢失?