RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题

全部问题

Martin Hope
eccs0103
Asked: 2024-03-23 00:10:45 +0000 UTC

仅执行同时发生的事件之一

  • 8

描述

我有一个特定的函数(为了清楚起见,我们称之为foo),如果用户将光标移动到某个元素上,应该执行该函数。由于我不知道用户拥有什么设备,因此我附加了所有可能的处理程序:

element.addEventListener(`mousedown`, (event) => {
    foo();
});
element.addEventListener(`pointerdown`, (event) => {
    foo();
});
element.addEventListener(`touchstart`, (event) => {
    foo();
});

现在我需要确保当其中一个处理程序同时开始工作时,其余处理程序保持沉默,以便该函数执行 1 次,而不是 3 次。我这样做:

const controller = new AbortController();
await new Promise((resolve) => {
    element.addEventListener(`mousedown`, (event) => {
        resolve();
    }, { signal: controller.signal });
    element.addEventListener(`pointerdown`, (event) => {
        resolve();
    }, { signal: controller.signal });
    element.addEventListener(`touchstart`, (event) => {
        resolve();
    }, { signal: controller.signal });
});
foo();
controller.abort();

它运作良好,但只能运作一次。为了让它再次工作,我需要创建一个函数,每次完成后都会生成相同的结构。

问题

好吧,解决方案就是解决方案的工作原理。但如果我们考虑到除了mousedown、之外pointerdown,touchstart我们还添加mousemove、pointermove和touchmove一堆其他类似的处理程序,那么在我看来,它看起来很乏味。

问题

有替代的、更好的解决方案吗?
或者这个设计可以简化吗?


常问问题

— 为什么不只使用pointer...监听器?它们也是通用的。- 它们有时无法正常工作。例如,pointermove在移动设备上使用时,放下鼠标后会冻结 24-30 帧。

— 为什么不为每个设备使用正确的处理程序?- 我很乐意。但如何才能 100% 知道处理程序是否“正确”呢?处理程序无处不在,但不做出反应。navigator.userAgent提供不正确的信息。我还应该尝试哪些其他方法?

javascript
  • 3 个回答
  • 85 Views
Martin Hope
Dimka
Asked: 2024-03-22 20:08:33 +0000 UTC

在Java中以二进制表示形式写出数字-128

  • 8

有一段代码:

public class Main{
    public static void main(String[] args) {
        byte a;
        a = (byte)0b1000_0000;
        System.out.println(a + ":\t0b1000_0000");

    }
}

在代码中,我将数字 -128 转换为 type ,byte因为它是 type 的文字int。解释原因(如果没有类型转换它将无法工作)。代码不应该在没有强制转换的情况下工作吗,因为范围就像byte[-128/127]。

有一段代码:

public class Main{
    public static void main(String[] args) {
        byte a;
        a = 0b1000_0000;
        System.out.println(a + ":\t0b1000_0000");

    }
}

我希望它能像这样工作。

java
  • 1 个回答
  • 53 Views
Martin Hope
nx4n
Asked: 2024-03-15 01:55:17 +0000 UTC

为什么我们需要 .org 0x7C00 指令来从头开始运行代码?从磁盘的第一个扇区运行代码

  • 8

许多消息来源写道,有必要在汇编代码中插入一个指示地址的指令.org 0x7C00,据说代码从该地址开始执行(更准确地说,BIOS从磁盘的第一个扇区进入那里)。该指令存在于 Linux 内核源代码和许多其他源代码中,例如https://github.com/fffaraz/bootloader/blob/master/bootloader.asm(顺便说一句,nasm 立即生成一个文件512字节,也不清楚为什么,只有一个猜测:它被自动“trunked”。这个“顺便说一下”指的是链接后的文本)。

理论上说:需要设置16位模式,BIOS读取第一个扇区,分别检查511和512字节是否存在0x55和0xAA,如果检查成功,则将代码放置在地址处0x0000:0x7C00 并开始执行。

我只是想在启动时在屏幕上显示“X”,这是代码和后续步骤:

.org 0x7C00
.code16
start:
    mov $'X', %al
    mov $0xE, %ah
    int $0x10
    cli
    hlt
    . = start + 510
    .byte = 0x55
    .byte = 0xAA

我编译:

as -o boot.o boot.S

我得到 objdump -D

boot.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <_start-0x7c00>:
    ...

0000000000007c00 <_start>:
    7c00:   b0 58                   mov    $0x58,%al
    7c02:   b4 0e                   mov    $0xe,%ah
    7c04:   cd 10                   int    $0x10
    7c06:   fa                      cli
    7c07:   f4                      hlt
    ...
    7dfc:   00 00                   add    %al,(%rax)
    7dfe:   55                      push   %rbp
    7dff:   aa                      stos   %al,%es:(%rdi)

Disassembly of section .note.gnu.property:

0000000000000000 <.note.gnu.property>:
   0:   04 00                   add    $0x0,%al
   2:   00 00                   add    %al,(%rax)
   4:   20 00                   and    %al,(%rax)
   6:   00 00                   add    %al,(%rax)
   8:   05 00 00 00 47          add    $0x47000000,%eax
   d:   4e 55                   rex.WRX push %rbp
   f:   00 02                   add    %al,(%rdx)
  11:   00 01                   add    %al,(%rcx)
  13:   c0 04 00 00             rolb   $0x0,(%rax,%rax,1)
    ...
  1f:   00 01                   add    %al,(%rcx)
  21:   00 01                   add    %al,(%rcx)
  23:   c0 04 00 00             rolb   $0x0,(%rax,%rax,1)
  27:   00 01                   add    %al,(%rcx)
  29:   00 00                   add    %al,(%rax)
  2b:   00 00                   add    %al,(%rax)
  2d:   00 00                   add    %al,(%rax)

我删除 .note.gnu.property

strip --remove-section=.note.gnu.property boot.o

关联:

ld --oformat binary -o boot boot.o

输出是一个大小为 32256 字节的文件。呵呵,当然,代码是从0x7C00开始的!查看该文件的十六进制转储,您可以看到该“地址”之前有零。那么问题来了,人们如何将这个文件写入第一个 512 字节扇区呢?当然没办法,有人不告诉什么,qemu-system-i386 -drive format=raw,file=boot他们甚至不会运行这个文件,前512字节中不会有代码

如果我们删除.org 0x7C00,生成的文件大小将恰好为 512 字节。这个文件已经可以启动qemu了。

如何在计算机启动时将控制权从 USB 转移到代码。我这样做:

为此,我使用 dd 实用程序。团队:

dd if=boot of=/dev/sdb bs=512 count=1 conv=notrunc

一切都被记录下来,hexdump也适用于/dev/sdb,前512的内容是相同的。qemu可以运行/dev/sdb

在BIOS中,我禁用安全模式,启用CSM支持(毕竟,uefi已经无处不在),准备好,转到启动选项卡,BIOS看到这个闪存驱动器(顺便说一下,KingstonDatatraveler 3.0),选择它,启动它,打印出令人垂涎的“X”符号。该代码无需 .org 0x7C00 即可运行。

问题:为什么需要这个指令?

更新:

现在我将0xAA更改为0xAF,代码仍然可以读取并运行。我是这样理解的:BIOS(没有uefi)仅将第一个扇区的前440字节复制到RAM中(https://wiki.archlinux.org/title/Arch_boot_process),这意味着它不会读取后续扇区和0x55和 0xAA 并不重要,它们是 uefi 所需要的。

问:我理解的对吗,或者是怎么回事?

ассемблер
  • 1 个回答
  • 50 Views
Martin Hope
doubledroid
Asked: 2024-03-13 19:10:45 +0000 UTC

如何根据 Collat​​z 假设优化测试数字的算法?

  • 8

我正在写一个期末学校项目,想到了几个优化想法:

  1. 我写下序列中出现的所有数字的一组
  2. 当偶数进入函数时,我立即退出函数(因为任何偶数在任何情况下都会变成奇数,而范围内显然有这样一个奇数)
  3. 如果数字是奇数,乘以 3 加 1 后,我立即除以 2,因为 无论如何它变得均匀

还有其他方法可以优化算法(特别是Python编程语言),还是我需要完全重做代码?

import time

checkedNumbers = set() #Множество, где хранятся все проверенные числа

def ThreeNPlusOne(N):
    if N % 2 == 0:
        return
    
    while N != 1 and N not in checkedNumbers:
        if N % 2 == 0:
            N //= 2
        else:
            N = 3 * N + 1
            N //= 2

numbersCount = int(input())

startTime = time.monotonic()

for number in range(1, numbersCount + 1):
    ThreeNPlusOne(number)

timeResult = time.monotonic() - startTime

print(timeResult) #Вывод времени, затраченного на проверку чисел
python
  • 1 个回答
  • 73 Views
Martin Hope
CrazyElf
Asked: 2024-03-12 01:24:56 +0000 UTC

同步调用异步方法?

  • 8

这可能是重复的,但我找不到明确的答案。是的,许多食谱都是旧版本的.NET Framework,但在现代版本中.NET (Core)可能会发生一些变化。

因此,遗留代码包含如下结构:

FooAsync().Wait();
...
var result = BarAsync().Result;

在我看来,这种对异步方法的处理是不正确的。在某个地方,我设法将异步拖到所有级别,并通过await. 但不可能在所有地方都这样做;在顶层的某个地方,一切都依赖于同步代码,我不确定是否可以将其更改为异步。或者在更高的地方有很多层次的架构,我也无法一次全部改变。

那么,问题是:在现代版本中.NET如何建议从同步代码调用异步代码?我知道根本不建议这样做,但是对于无法避免这种情况的情况,最正确的方法是什么?还是只能接受现状,其他选择也好不到哪儿去?

PS 特别是,在类构造函数中调用异步方法存在问题。是的,有一些技术可以隐藏构造函数,但在我看来,它们不能与使用DI框架结合起来。例子:

public class Foo : IFoo
{
    public Foo(ISomething something, IAnother another)
    {
        _something = something;
        _another = another;
        Bar().Wait();
    }
}
...
serviceCollection.AddSingleton<ISomething, Something>();
serviceCollection.AddSingleton<IAnother, Another>();
serviceCollection.AddSingleton<IFoo, Foo>();
c#
  • 1 个回答
  • 96 Views
上一页
下一页

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5