小编Ric*_*ler的帖子

TortoiseMerge可以用作Windows Git Bash的difftool吗?

我刚开始和Git一起工作.我想使用TortoiseMerge作为difftool和mergetool.

在我的个人用户目录中的.gtconfig中,我有以下部分.我删除了此问题的用户和颜色部分.

[merge]
    tool = tortoisemerge
[mergetool "tortoisemerge"]
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[diff]
    tool = tortoisemerge
[difftool "tortoisemerge"]
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
Run Code Online (Sandbox Code Playgroud)

如果我在Git Bash提示符下输入tortoisemerge它会加载.众所周知,它正在路上.但是,如果我输入命令,我会收到以下错误.

Rich:mygittest (master *)
$ git difftool
error: 'tortoisemerge' can only be used to resolve merges
merge tool candidates: kompare emerge vimdiff
No known merge resolution program available.
external diff died, stopping at readme.txt.
Rich:mygittest (master *)
$ 
Run Code Online (Sandbox Code Playgroud)

我不理解这项工作是什么?Tortoisemerge与TortoiseSVN一起安装.

git git-diff tortoisegit tortoisegitmerge

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

OmniThreadLibrary概述

有没有对Delphi的OmniThreadLibray进行介绍性概述的地方?

我在Delphi XE中安装了当前代码.这些例子很有用.我一直在查看相关的Delphi Geek博客以及用法示例.Gabr承认文档不存在.在深入了解具体示例之前,我想了解一下框架的结构.我对TThread的使用有了解,所以我不需要去一个线程101网站.

该框架已表明有忠诚的追随者,我想我只是没有找到正确的地方.

delphi delphi-xe omnithreadlibrary

20
推荐指数
1
解决办法
1063
查看次数

在Delphi中,为什么传递一个Interface变量有时需要它是一个const参数?

首先是问题:为什么删除const UnregisterNode()导致失败,而不是导致失败RegisterNode().

现在的背景:我正在使用Interfaces在Delphi XE中工作,我遇到了一个让我停顿一下的工件,我得出的结论是我真的不明白为什么.

不需要显式释放作为接口访问的对象.当最后一个引用超出范围时,它将被销毁.这似乎很简单.我编写了一个测试用例来显示按预期运行的变量和两个失败的变量.六个测试用例仅限于Register和Unregister方法的Node参数的变体.

按下表单上的单个按钮可创建容器和三个节点.对它们进行操作以演示该程序

该程序创建一些链接到简单容器的简单节点.问题发生在案例#1和#6中.在释放节点时,它会调用containers Unregister()方法.该方法删除指向TList中节点的指针的副本.当在两个失败的情况下离开该方法时,它以Destroy()递归方式再次启动该过程调用该节点的方法,直到发生堆栈溢出.

在有效的四种情况下,Destroy()方法恢复正常,程序将继续正常退出.

失败#1(案例1)

procedure RegisterNode(Node:INode);
procedure UnregisterNode(Node:INode);
Run Code Online (Sandbox Code Playgroud)

Unregister()TNode.Destroy()方法调用节点似乎影响INode的引用计数导致多次调用Destroy(). 为什么这种情况发生我不明白.当我Register()具有相同样式的参数的节点时,它不会发生.

失败#2(案例6)

procedure RegisterNode(const Node:INode);
procedure UnregisterNode(Node:INode);
Run Code Online (Sandbox Code Playgroud)

这里发生了同样的失败模式.如案例5中那样将const添加到参数列表可防止递归调用Destroy().

代码:

unit fMain;
{
   Case 1 - Fails when a node is freed, after unregistering,
             TNode.Destroy is called again
   Case 2 - Passes
   case 3 - Passes
   Case 4 - Passes
   Case 5 - Passes
   Case 6 - Fails the …
Run Code Online (Sandbox Code Playgroud)

delphi interface delphi-xe

17
推荐指数
2
解决办法
4099
查看次数

使类的属性线程安全的最佳实践是什么?

[编辑:看起来原始问题涉及一个double而不是整数.所以我认为这个问题代表我们是否将整数更改为double.]

我很少遇到从多个线程中使用的类读取整数属性,有时会返回零值.初始化后,值不会更改.

这个问题解决了这一点 共识是,即使我正在访问整数,我需要同步属性.(一些原始答案已被删除).我没有在那里选择答案,因为我还没有解决我的问题.

所以我对此做了一些研究,我不确定使用哪个.Net 4的锁定机制,或者锁是否应该在类本身之外.

这是我想到的用法:

  public class ConfigInfo
  {
    private readonly object TimerIntervalLocker = new object();
    private int _TimerInterval;
    public int TimerInterval
    {
      get
      {
        lock (TimerIntervalLocker) {
          return _TimerInterval;
        }
      }
    }

    private int _Factor1;
    public int Factor1
    {
      set
      {
        lock (TimerIntervalLocker) {
          _Factor1 = value;
          _TimerInterval = _Factor1 * _Factor2;
        }
      }
      get
      {
        lock (TimerIntervalLocker) {
          return _Factor1;
        }
      }
    }

    private int _Factor2;
    public int Factor2
    {
      set
      {
        lock (TimerIntervalLocker) …
Run Code Online (Sandbox Code Playgroud)

c# multithreading properties thread-safety c#-4.0

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

Self在Delphi中挂起一个不需要的线程并安全恢复

这个问题涉及Delphi和XE特别弃用Suspend和Resume.我已阅读其他帖子,到目前为止我还没有找到类似的用法,所以我将继续讨论并要求进行讨论.

我想知道有什么更好的方法可以在不需要时暂停线程?

我们有一个多年来使用的Delphi类,它基本上是一个与线程进程相关联的FIFO队列.队列接受主线程上的数据对象,如果线程被挂起,它将恢复它.

作为线程的Execute进程的一部分,对象从队列中弹出并在线程上处理.通常这是进行数据库查找.

在进程结束时,对象的属性将更新并标记为主线程可用或传递给另一个队列.执行过程的最后一步(实际上是第一步)是检查队列中是否还有其他项.如果有继续,否则它自行暂停.

它们是键,它在执行循环完成时是唯一的挂起操作,并且在将新项放入队列时调用正常操作期间的唯一恢复.例外是队列类被终止时.

恢复功能看起来像这样.

process TthrdQueue.MyResume();
  begin
    if Suspended then begin
      Sleep(1); //Allow thread to suspend if it is in the process of suspending
      Resume();
    end;
  end;
Run Code Online (Sandbox Code Playgroud)

执行看起来与此类似

process TthrdQueue.Execute();
  var
    Obj : TMyObject;
  begin
    inherited;
    FreeOnTerminate := true;
    while not terminated do begin
      if not Queue.Empty then begin
        Obj :=  Pop();
        MyProcess(Obj);  //Do work
        Obj.Ready := true;
      end
      else
        Suspend();  // No more Work
    end;   //Queue clean up in Destructor
  end;  
Run Code Online (Sandbox Code Playgroud)

TthrdQueue Push例程在堆栈中添加另一个对象后调用MyResume.如果线程被挂起,MyResume只调用Resume.

关闭时,我们将terminate设置为true,如果它被挂起则调用MyResume.

delphi resume multithreading suspend

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

你能在Delphi XE的二级线程中接收事件吗?

我想在示例应用程序中有三个线程.
线程#1(主线程) - 用户界面/ GUI
线程#2 - 连接到通过传递到数据队列的事件接收数据的串行端口设备.
线程#3 - 在创建队列条目时激活,处理数据节点,释放数据对象.

目标是
a)当主窗体上的鼠标按住按钮或表格时,防止数据丢失.
b)快速从事件中获取数据,将其填入队列,重新进入休眠状态
c)处理数据时,否则进入休眠状态.

像AsyncoPro这样的包可以将事件处理绑定到非主线程吗?

我从未对串口事件驱动的应用程序做过多少工作,我所使用的大部分内容都经过轮询,我想做一些测试.

delphi events multithreading

5
推荐指数
3
解决办法
1591
查看次数

将Mercurial UNIX Line Endings转换为Windows

如何克隆Mercurial存储库以使我的工作副本始终具有CRLF行结尾?

这类似于这个问题 在Mercurial中配置eol扩展的问题

但我遗漏了一些似乎在我的电脑上无法正常工作的东西.

我是Mercurial的新手,多年来一直使用SVN(TortoiseSVN).我安装了TortoiseHG,我正在使用Brian O'Sullivan的Mercurial:The Definitive Guide一书.

所以我做的第一件事就是在我的机器上克隆他的示例存储库,发现该文件有LF结尾而不是Windows CRLF版本.

所以我试着像在SVN中那样找到处理这个的选项.

我使用以下内容在%USERPROFILE%\ Mercurial.ini中创建了一个文件.

[extensions]
eol =
Run Code Online (Sandbox Code Playgroud)

我删除了存储库并再次检查了它.没变.

再看一些我看到我可能需要一个.hgeol文件.所以我在%USERPROFILE%文件夹中创建了一个

[patterns]
** = native
Run Code Online (Sandbox Code Playgroud)

删除并重新克隆存储库,该文件仍然具有LF而不是CRLF.

然后我再次尝试将.hgeol文件放在存储库的父目录中,最后将命令放在Mercurial.ini文件中.我也尝试用CRLF替换native.

我必须遗漏一些东西,因为看起来这应该是我需要的全部工作.也许我错过了像SVN这样的自动转换概念.

mercurial eol

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

如何通过Tab键及时启用WinForm按钮以获得焦点

Visual Studio 2010,C#

我有ComboBox一个DropDown,AutoComplete设置SuggestAppendAutoCompleteSource距离ListItems.用户将数据键入其中,直到具有正确的条目.如果数据与列表项之一匹配,则组合框旁边的按钮被禁用.

如果用户点击Tab键,则自动完成功能会接受当前建议.它还会移动到启用的选项卡序列中的下一个控件.当然,因为我希望它转到disbabled按钮,我需要在验证条目后立即启用它.

问题是,没有我试过事件,PreviewKeyDown,LostFocus,SelectedIndexChanged让我使按钮的时间它被处理连线和接收焦点.它始终以Tab键顺序进入下一个按钮,该按钮始终处于启用状态.

我准备好让按钮保持启用状态,如果太快按下它就会出错,但我不想这样做.我也不想进入特殊模式标志来跟踪这些控件何时获得焦点.验证似乎是正常的事情,但我被困住了.

如果在SelectedIndexChanged用户进行匹配时工作,这将很容易.当盒子清除时,或者当找到类型匹配时,它不会触发.

c# events winforms windows-controls

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

为什么整数属性有时会返回0?

[编辑:我意识到失败的参数实际上是一个double而不是整数.根据日志,整数计时器都不会失败.大多数计时器和参数都是整数,但不是全部.双打不是原子的,毕竟缺乏锁定可能是个问题.

我有一个应用程序,它使用包含可配置值属性的类.应用程序中使用的大多数属性都是派生的.这些值在启动时设置,并且在应用程序的主要部分运行时不会更改.

private int _TimerInterval;
public int TimerInterval { get { return _TimerInterval; } }

private int _Factor1;
public int Factor1 { 
  set { 
    _Factor1 = value;
    _TimerInterval = _Factor1 * _Factor2;
  }
  get { return _Factor1; }
}

private int _Factor2;
public int Factor2 { 
  set { 
    _Factor2 = value;
    _TimerInterval = _Factor1 * _Factor2;
  }
  get { return _Factor2; }
}
Run Code Online (Sandbox Code Playgroud)

我发现由于异常,返回的值很少显然为零.

Exception Message: '0' is not a valid value for 'Interval'. 'Interval' must be   greater than 0. …
Run Code Online (Sandbox Code Playgroud)

c# multithreading properties timer c#-4.0

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

如何在设计时创建可以订阅另一个WinForm控件的C#属性?

我想在一个控件中创建一个属性,该控件将充当一个能够连接到另一个非可视控件以显示其当前状态的查看器.在这个例子中,假设观众只会显示在线离线的状态.

我希望能够删除一个非可视化控制,让我们把它叫做Heater类型IHeater,形式,然后掉落HeaterMonitor.我想进入HeaterMonitor和自定义Source属性的属性,查看IHeaters表单上当前所有的列表.

选择属性中的instance(Heater1)Source将订阅HeaterMonitor1生成的所有状态更新Heater1.

是否存在我可以作为模板遵循的现有模式?

如果它有所作为,我可以使用.net 3.5及更高版本.我选择data-binding了标签,但我不确定这是否正确,因为这不是数据库问题.但它似乎与DataGridView选择一个DataSource属性相似.

编辑#1: 根据到目前为止的评论,我认为我没有强调我想要得到的东西.我希望属性编辑器列出IHeater表单上符合条件的控件.我在创建IHeater可以在运行时分配的常规属性时没有问题.

.net c# windows-forms-designer winforms

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