小编Joe*_*oel的帖子

互斥体如何真正起作用?

互斥体背后的想法是只允许一个线程一次访问一段内存.如果一个线程锁定互斥锁,则任何其他锁定尝试将阻塞,直到第一个锁定尝试解锁.但是,这是如何实现的?为了锁定自己,互斥锁必须设置一个位置,表示它已被锁定.但是,如果第二个互斥锁在第一个写入的同时正在读取,那该怎么办呢?更糟糕的是,如果他们同时锁定互斥锁怎么办?互斥体会屈服于它要防止的同样问题.

互斥体如何真正起作用?

c++ concurrency multithreading mutex

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

在C++中使用"#define"的替代方法?为什么不赞成?

我已经开发了不到一年的C++,但在那段时间里,我听到很多人都在谈论有多糟糕#define.现在,我意识到它是由预处理器而不是编译器解释的,因此无法调试,但这真的那么糟糕吗?

这是一个例子(未经测试的代码,但你得到了一般的想法):

#define VERSION "1.2"

#include <string>

class Foo {
  public:
    string getVersion() {return "The current version is "+VERSION;}
};
Run Code Online (Sandbox Code Playgroud)
  1. 为什么这个代码不好?
  2. 有没有替代使用#define

c++ coding-style global-variables c-preprocessor

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

Qt物理场景多线程

我有一个QGraphicsScene,大约有1000个QGraphicsItems,实际上是物理项目.他们前进的每一帧,检查碰撞,并解决这些碰撞等.我真的很喜欢物理多线程.

据我所知,QGraphics类不是线程安全的.意思是,它们只能从主线程中调用.这是否强制我使用信号/槽机制将每个帧的最终项属性(x,y,旋转)发送到主线程,然后使用主线程方法实际更新QGraphicsItems?或者有更简单的方法吗?

以下只是一个假设:我可以使用QtConcurrent在我的QGraphicsItems列表上运行一个方法吗?如果我在QGraphicsItem绘制方法中使用QMutex,在物理方法中使用QMutex(这将改变我的QGraphicsItem的属性),这是否会保证在任何一个时刻只有一个线程正在读/写每个QGraphicsItem?

c++ user-interface qt multithreading physics

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

Javascript从事件处理程序获取对父对象/类的引用

我有一个类(或者包含函数的对象;我听说没有Javascript类这样的东西)叫做Foo,它有一个附加到click事件的事件处理程序.当调用事件处理程序时,我想修改我的类Foo的属性.通常,我会使用this关键字,但在事件处理程序中,this引用设置为对html元素的引用.这是我的代码:

function Foo() {

    this.num=0;
    $('element').click(this.eventHandler);// jQuery to attach an onclick event to my element.

    this.eventHandler=function() {
        this.num++;// This doesn't work.
        // Normally, "this" would refer to my instance of Foo,
        // but as an event handler, "this" refers to the html element.
    }
}
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:如何在我的事件处理程序中引用我的Foo实例,以便我可以修改其属性(如num)?

javascript oop jquery class javascript-events

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

node.js数组实际上是hashmaps吗?

令我惊讶的是,这段代码实际上在node.js中有效:

var arr = new Array();
// also works: var arr = [];
arr[0] = 123;
arr['abc'] = 456;
arr; // node.js: [ 123, abc: 456 ], chrome: [123]
Run Code Online (Sandbox Code Playgroud)

我一直以为数组按顺序存储它的对象,只能通过整数键访问,比如C++中的std :: vector.但是,这里它的作用就像一张地图或一个物体.更令人困惑的是,相同的代码在chrome中按预期工作,返回一个带有单个条目的数组,123.我认为node.js和chrome javascript使用相同的内部引擎V8.这里发生了什么?

javascript arrays v8 hashmap node.js

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

方程"a + bx = c + dy"的积分解

在等式中a + bx = c + dy,所有变量都是整数.a,b,c,和d是已知的.我如何找到xy?的整体解决方案?如果我想正确的,就会有解决方案无限多的,通过的最小公倍数分开bd,但我需要的是一个解决方案,我可以计算出的其余部分.这是一个例子:

a = 2
b = 3
c = 4
d = 5
a + bx: (2, 5,  8, 11, 14)
c + dy: (4, 9, 14, 19, 24)

a + bx intersects c + dy at 14, so:
x = 4
y = 2
Run Code Online (Sandbox Code Playgroud)

现在,我循环遍历整数值,x直到找到y(伪代码)的整数值:

function integral_solution(int a, int b, int …
Run Code Online (Sandbox Code Playgroud)

c++ math equation equation-solving integer-arithmetic

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

用极坐标绘制正方形

我有一个正方形,最近的点距离中心1个单位.请参阅下面的ascii图:

+-----------+
|           |
|  x        |
|-----+     |
|           |
|           |
+-----------+
Run Code Online (Sandbox Code Playgroud)

因此,从原点到角落的距离是sqrt(2).我需要一个函数,以任何角度返回从原点到正方形上的点的距离.例如,对于0的输入,函数将返回1.对于45的输入,函数将返回到角的距离,2的平方根.然后对于90,它将再次返回1.

换句话说,当您使用极坐标图绘制函数时,它将绘制一个正方形.

我相信这个函数会是这样的:

f(x) = sqrt(tan(x)^2+1)
Run Code Online (Sandbox Code Playgroud)

唯一的问题是上面的函数不会绘制正方形的边.我需要能够吸引所有四方面的东西.

我知道有一个类似于此的东西的三角函数,但我将在javascript中使用这个函数,所以我只能使用标准的三角函数.

任何帮助将不胜感激.提前致谢.

javascript math graphing trigonometry

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

如何将变量绑定到jquery ajax请求?

这是不言自明的:

while (...) {
    var string='something that changes for each ajax request.';
    $.ajax({'type': 'GET','dataType': 'json', 'url': 'get_data.php'}).done(processData);
}
function processData(data) {
    // get string into here somehow.
}
Run Code Online (Sandbox Code Playgroud)

如你所见,我需要以某种方式string进入processData.我不能创建一个全局变量,因为string每个ajax请求都不同.所以,问题是,我如何绑定string到我的ajax请求,以便我可以从中访问它processData

我真的不想附加string到查询并让服务器返回它,但如果这是我唯一的选择,我别无选择.

提前致谢.

javascript data-binding ajax jquery jquery-deferred

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

OpenGL 早期深度测试不起作用

这是我的片段着色器:

#version 420 core
#extension GL_ARB_explicit_uniform_location : enable
#extension GL_ARB_shader_storage_buffer_object : require
layout(early_fragment_tests) in;
layout(binding = 4, offset = 0) uniform atomic_uint num_fragments;
// ...
void main(void)
{
    atomicCounterIncrement(num_fragments);
    frag_color = vec4(1.0, 0.0, 0.0, 0.0);

    atomicAdd(...);
}
Run Code Online (Sandbox Code Playgroud)

我的三角形完全覆盖了屏幕。预期的行为是num_fragments等于像素数 (640*480 = 307200),这是单层三角形。但是,当我在现有三角形后面添加一个三角形时,num_fragments 会变成一个更高的值,就像正在为被遮挡的三角形执行片段着色器一样。

为什么是这样?我认为 early_fragment_tests 指令会阻止这种行为。这不仅仅是一种优化,因为着色器中有原子存储,应该只为未遮挡的像素运行。

opengl graphics gpu glsl opengl-4

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

身体上的Jquery触发器调整大小

我有一个页面,其内容由javascript修改.我想创建一种在内容大小发生变化时触发的事件监听器.我不想要这个:

$(window).resize(...);
Run Code Online (Sandbox Code Playgroud)

这会在窗口大小更改时触发 - 例如,当用户重新调整浏览器窗口大小时.我试过这个:

$('body').resize(...);
Run Code Online (Sandbox Code Playgroud)

但它不会触发.如何创建在内容导致页面大小更改时触发的事件?我也对普通的JavaScript解决方案持开放态度.

javascript jquery events

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

Why don't I have to import classes not used as variable types in Java?

Here is an example:

import java.util.HashMap;

public class Test
{
    public static void main(String[] args)
    {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("leorum", 1);
        map.put("ipsum", 2);
        map.put("dolor", 3);

        System.out.println(map.keySet().toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

Everything compiles and runs fine. However, when I move map.keySet() to another variable:

import java.util.HashMap;

public class Test
{
    public static void main(String[] args)
    {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        map.put("leorum", 1);
        map.put("ipsum", 2);
        map.put("dolor", 3);

        Set<String> keys = map.keySet();
        System.out.println(keys.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

I get an …

java import class

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