小编Rob*_*obz的帖子

RichTextBox语法实时突出显示 - 禁用重绘

我正在创建一个带有RichTextBox的函数,并且可以访问关键字列表和'badwords'.我需要突出显示我在用户输入时在RichTextBox中找到的任何关键字和坏词,这意味着每次发布编辑键时都会调用该函数.

我写过这个函数,但是框中的文字和光标闪烁得太过舒适.

我发现了一个解决方案 - 在我编辑和格式化文本时禁用RichTextBox重绘自身的能力.但是,我知道这样做的唯一方法是覆盖"WndProc"函数并拦截(我将要收集的内容)重绘消息如下:

protected override void WndProc(ref System.Windows.Forms.Message m)
{
    if (m.Msg == 0x00f) {
         if (paint)
            base.WndProc(ref m);
         else
            m.Result = IntPtr.Zero;
    }
    else
         base.WndProc(ref m);
}
Run Code Online (Sandbox Code Playgroud)

布尔突出'paint'在我开始突出显示之前设置为false,在我完成时设置为true.但正如我所说,我制作的函数必须采用RichTextBox; 我不能使用子类.

那么,有没有办法禁止从外部自动重新绘制RichTextBox?

c# graphics syntax-highlighting richtextbox

13
推荐指数
2
解决办法
8742
查看次数

在x86中进行/溢出和减法

我试图在x86中包围溢出和携带标志.

据我了解,为了添加带符号2的补码数,只能用四种方式之一生成标志(我的例子是4位数):

  1. pos + pos = neg(溢出)
    • 0111 + 0001 = 1000(7 + 1 = -8)
  2. pos + neg = pos(carry)
    • 0011 + 1110 = 0001(3 + -2 = 1)
  3. neg + neg = neg(carry)
    • 1111 + 1111 = 1110(-1 + -1 = -2)
  4. neg + neg = pos(溢出和进位)
    • 1000 + 1001 = 0001(-8 + -7 = 1)

那么,在x86汇编中,从A中减去B会产生与添加A和-B相同的标志吗?

math x86 overflow twos-complement carryflag

13
推荐指数
2
解决办法
8271
查看次数

默认析构函数的作用是多少

C++类中的默认析构函数是否会自动删除未在代码中显式分配的成员?例如:

class C {
  public:
    C() {}
    int arr[100];
};

int main(void) {
  C* myC = new C();
  delete myC;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

删除myC会自动解除myC的arr吗?或者我是否需要编写C的析构函数来明确地执行此操作?

c++ destructor memory-management

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

动态增加java堆空间

我编写了一个java程序,用于测试具有不同处理器数量的不同机器上的几个多线程算法的速度.

在某些机器上,merge sort*失败,因为它需要一个相当大的堆空间来处理非常大的数组.在运行程序之前,我可以自己轻松地更改java堆空间,但我觉得更强大和简单的方法是从程序本身执行此任务.

有没有办法在java程序的过程中从虚拟机请求/获得更多的堆空间

注意:我确实理解我可以用"java -Xmx1g Program"这样的脚本执行程序; 我对这个问题的好奇心部分是学术性的.

*我的实现不会在线合并.它需要O(n)额外的内存.

java heap mergesort scalability

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

c中奇怪的括号和宏语法

我试图将其表达为谷歌,但未能找到任何有用的描述它.这是代码:

struct Segdesc gdt[] =
{
  // 0x0 - unused (always faults -- for trapping NULL far pointers)
  SEG_NULL,

  // 0x8 - kernel code segment
  [GD_KT >> 3] = SEG(STA_X | STA_R, 0x0, 0xffffffff, 0),

  // 0x10 - kernel data segment
  [GD_KD >> 3] = SEG(STA_W, 0x0, 0xffffffff, 0),

  // 0x18 - user code segment
  [GD_UT >> 3] = SEG(STA_X | STA_R, 0x0, 0xffffffff, 3),

  // 0x20 - user data segment
  [GD_UD >> 3] = SEG(STA_W, 0x0, 0xffffffff, 3),

  // …
Run Code Online (Sandbox Code Playgroud)

c arrays macros pointers

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

无法使用子模块从分支机构检出主分支

我的repo中有一个目录(称之为blah),其中包含一些我从另一个repo(repo-blah)手动复制的文件.有一天,我决定变聪明并将这个blah目录作为一个子模块,这样我就不必在他们改变时手动重新复制文件repo-blah,这样我就可以在我的仓库中对这些文件进行更改并且有一个gitish更新方式repo-blah.

我一直在使用master分支,所以我创建了另一个分支sub-blah-branch,在那里我从索引中删除了blah目录:

$ git rm -r blah
Run Code Online (Sandbox Code Playgroud)

然后为它创建一个子模块:

$ git submodule add uri/to/repo-blah blah
Run Code Online (Sandbox Code Playgroud)

我承诺一切,并确保回购清洁:

$ git status
# On branch sub-blah-branch
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)

然后,虽然对所有这些子模块的东西感觉非常酷,但我尝试检查主分支.但我明白了:

$ git checkout master
error: The following untracked working tree files would be overwritten by checkout:
    blah/[every file that I had manually copied from repo-blah]
Please move or remove them before you can switch branches.
Aborting
Run Code Online (Sandbox Code Playgroud)

Pro Git关于子模块的章节告诉我,当从已创建子模块的分支切换时,这些子模块的内容不会自动删除,而是在repo切换分支后变为未跟踪.在这种情况下,我不能切换到 …

git git-submodules

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

Chrome中奇怪的javascript记忆

我在index.html中有以下内容:

<html><body><pre>
<script src="program.js"></script>
</pre></body></html>
Run Code Online (Sandbox Code Playgroud)

以及program.js中的以下内容:

document.writeln(JSON.stringify(name));
name = "Bob";
Run Code Online (Sandbox Code Playgroud)

首次打开index.html,生成(输出A):

> ""
Run Code Online (Sandbox Code Playgroud)

然后,刷新页面后,生成(输出B):

> "Bob"
Run Code Online (Sandbox Code Playgroud)

我在Firefox中看不到输出B.

回到Chrome:但是,如果我使用除'name'之外的其他变量,例如'val':

document.writeln(JSON.stringify(val));
val = "Bob";
Run Code Online (Sandbox Code Playgroud)

我得到一个例外:

Uncaught ReferenceError: val is not defined 
Run Code Online (Sandbox Code Playgroud)

因此,由于"名称"恰好位于全球范围内,我认为Chrome以某种方式记住旧页面加载中的全局变量,并在新页面加载中设置这些变量的默认值.但是,如果我使用全局变量'status',我总是看到输出A.

为什么会这样?

javascript google-chrome

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

Java:通过多线程并行化快速排序

我正在尝试在Java中并行化算法.我从合并排序开始,并在这个问题上发布了我的尝试.我修改过的尝试是在下面的代码中,我现在尝试并行快速排序.

在我的多线程实现或解决此问题的方法中是否存在任何新手错误?如果不是,我不应期望在双核上的顺序算法和并行算法之间的速度增加超过32%(参见底部的时间)?

这是多线程算法:

    public class ThreadedQuick extends Thread
    {
        final int MAX_THREADS = Runtime.getRuntime().availableProcessors();

        CountDownLatch doneSignal;
        static int num_threads = 1;

        int[] my_array;
        int start, end;

        public ThreadedQuick(CountDownLatch doneSignal, int[] array, int start, int end) {
            this.my_array = array;
            this.start = start;
            this.end = end;
            this.doneSignal = doneSignal;
        }

        public static void reset() {
            num_threads = 1;
        }

        public void run() {
            quicksort(my_array, start, end);
            doneSignal.countDown();
            num_threads--;
        }

        public void quicksort(int[] array, int start, int end) {
            int …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing multithreading quicksort

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

为什么在REPL中0.0 == 0.0为false,但在本机执行时为true?

0.0 == 0.0false当我在交互式REPL中执行该表达式时:

$ ocaml
        OCaml version 4.02.3

# 0.0 == 0.0;;
- : bool = false
# 0.0 = 0.0;;
- : bool = true
Run Code Online (Sandbox Code Playgroud)

但是true如果我编译并运行这个程序:

let _ =                                                                                                                                                                                                                                                                  
  print_endline (string_of_bool (0.0 == 0.0));
  print_endline (string_of_bool (0.0 = 0.0))
Run Code Online (Sandbox Code Playgroud)

沙丘文件:

(executable (name main))
Run Code Online (Sandbox Code Playgroud)

编译并运行它:

$ dune --version
1.0.0
$ dune exec ./main.exe
true
true
Run Code Online (Sandbox Code Playgroud)

怎么可能0.0 == 0.0永远是false,为什么会它本身执行该代码时是不同的值?

floating-point ocaml

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

为什么我的多线程排序算法不比单线程mergesort快

有一些算法,当一个任务划分并且每个部分并行完成时,其运行时间会显着减少.这些算法之一是合并排序,其中列表被划分为无限小的部分,然后以排序的顺序重新组合.我决定做一个实验来测试我是否可以通过使用多个线程来提高这种速度.我在带有Windows Vista的四核戴尔上运行Java中的以下功能.

一个函数(控件案例)只是递归的:

// x is an array of N elements in random order
public int[] mergeSort(int[] x) {
    if (x.length == 1) 
        return x;

    // Dividing the array in half
    int[] a = new int[x.length/2];
    int[] b = new int[x.length/2+((x.length%2 == 1)?1:0)];
    for(int i = 0; i < x.length/2; i++) 
        a[i] = x[i];
    for(int i = 0; i < x.length/2+((x.length%2 == 1)?1:0); i++) 
        b[i] = x[i+x.length/2];

    // Sending them off to continue being divided
    mergeSort(a);
    mergeSort(b);

    // Recombining the …
Run Code Online (Sandbox Code Playgroud)

java parallel-processing multithreading

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