小编Nol*_*rin的帖子

Python线程退出代码

有没有办法判断一个线程是正常退出还是因为异常?

python multithreading exit-code

12
推荐指数
1
解决办法
9383
查看次数

在for循环中会调用strlen()多少次?

下面的strlen()函数是否只被调用一次(存储的值用于进一步的比较); 或者每次进行比较时都会调用它?

for (i = 0; i < strlen(word); i++)
{ /* do stuff */ }
Run Code Online (Sandbox Code Playgroud)

c loops

12
推荐指数
3
解决办法
3262
查看次数

LINQ to XML - 它是如何工作的?

我的问题本质上是一个简单的问题,虽然我正在寻找这里可能的深入答案:LINQ to XML如何在幕后工作?

现在,我已经有了相当多的LINQ to XML用于各种应用程序的经验,所以它的接口对我来说并不陌生,但我对内部的运行方式一无所知.现在,我确实有一般多少LINQ提供工作的一些认识(实施IQueryableIQueryProvider和利用访问者模式,在本质).但是,我还没有发现LINQ to XML的LINQ提供程序的任何内容 - 即使搞乱了Reflector并没有让我任何地方,但也许我错过了显而易见的事情.最有趣的是,我无法IQueryProviderSystem.Xml.Linq程序集/命名空间中找到任何LINQ提供程序(实现)的证据.

从观察LINQ到XML模型,它让我感到一种相当独特的LINQ形式,因为LINQ查询和相关语法似乎不是技术的重要组成部分,它似乎更多地基于可查询的DOM提供了许多有用的扩展方法的模型.实际上,我首先要知道的是,LINQ to XML甚至是否具有标准意义上的查询提供程序(例如LINQ to SQL),或者它本质上是一个带有扩展方法的框架,您可以在其上使用LINQ to Objects来方便使用.另外,我也很好奇从XML代码到DOM层次结构的解析/转换是如何完成的 - 在这个意义上是否XDocument类似于旧的XmlDocument?是否XmlReader在加载后使用一个或类似的幕后解析和解释文档?

这是一个非常开放的问题,因此任何有关LINQ to XML如何在幕后运行的信息都将受到欢迎.我的目的主要是建立一个如何设计这种特定LINQ技术的图片,以便随后我可以尝试自己模拟一种与XML结构类似的格式.

.net xml linq linq-to-xml

11
推荐指数
1
解决办法
1525
查看次数

ReExCommand <T>上的CanExecute无法正常工作

我正在使用MVVM Light V3 alpha 3编写一个WPF 4应用程序(使用VS2010 RC),并且在这里遇到了一些奇怪的行为......

我有一个打开a的命令,Window那个Window创建了ViewModel等等 - 那里没什么奇怪的.

在那Window我有一些RelayCommands,例如:

CategoryBeenSelected = new RelayCommand(() => OnCategoryUpdate = true);
Run Code Online (Sandbox Code Playgroud)

没有什么奇怪的 - 它按照我的预期工作.

问题是我不能使用通用RelayCommand的CanExecute方法/ lambda表达式.

这有效:

DeleteCategoryCommand = new RelayCommand<int>(DeleteCategory);
Run Code Online (Sandbox Code Playgroud)

但这不是:

DeleteCategoryCommand = new RelayCommand<int>(DeleteCategory, CanDeleteCategory);
Run Code Online (Sandbox Code Playgroud)

窗口没有出现.我的意思是,我单击打开窗口的按钮,应用程序刚刚被阻止,几秒钟后,Window的InitializeComponent方法抛出一个NullReferenceException(对象引用未设置为对象的实例)

简而言之,如果我将一个CanExecute方法放在a上RelayCommand<T>,Window那么拥有 ViewModel(带有)的那个RelayCommand<T>就无法实例化.如果我删除了CanExecute,Window显示出来.

这里的问题在哪里?我糊涂了.

谢谢.

编辑:根据要求,这是堆栈跟踪:

A first chance exception of type 'System.NullReferenceException' occurred in PresentationFramework.dll
   at GalaSoft.MvvmLight.Command.RelayCommand`1.CanExecute(Object parameter)
   at System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute()
   at …

c# wpf mvvm relaycommand

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

F#中的组合和排列

我最近为F#项目编写了以下组合和排列函数,但我很清楚它们远未优化.

/// Rotates a list by one place forward.
let rotate lst =
    List.tail lst @ [List.head lst]

/// Gets all rotations of a list.
let getRotations lst =
    let rec getAll lst i = if i = 0 then [] else lst :: (getAll (rotate lst) (i - 1))
    getAll lst (List.length lst)

/// Gets all permutations (without repetition) of specified length from a list.
let rec getPerms n lst = 
    match n, lst with
    | 0, _ -> …
Run Code Online (Sandbox Code Playgroud)

f# combinations permutation combinatorics

11
推荐指数
2
解决办法
4425
查看次数

C#4.0中的障碍和C#3.0中的WaitHandle之间的区别?

我正在接受C#4.0,其中一个令我困惑的事情就是屏障概念.

这不仅仅是使用WaitAll方法WaitHandle吗?是不是等待所有线程完成?

我从这个页面学到了屏障结构:http://www.managed-world.com/archive/2009/02/09/an-intro-to-barrier.aspx

但是,它似乎就像WaitAll方法一样.我错过了什么?这有什么区别?

谢谢.

.net c# multithreading .net-4.0

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

特定泛型类型的扩展方法

我正在尝试为F#中绑定到特定泛型类型参数的泛型类型创建各种扩展方法,但该语言似乎不允许我:

我想做的是如下:

type IEnumerable<int> with
    member this.foo =
        this.ToString()
Run Code Online (Sandbox Code Playgroud)

但它给了我编译器错误(强调int关键字):

类型名称中的意外标识符.预期的中缀运算符,引号或其他标记.

下面工作,尽管它没有特异性结合的泛型类型参数int,因为我想:

type IEnumerable<'a> with
    member this.foo =
        this.ToString()
Run Code Online (Sandbox Code Playgroud)

有没有办法在F#中实现这个目标 - 我可能只是使用了错误的语法?如果没有,我会很感激,如果有人可以建议一个解决方法,也许在某处使用类型约束.

generics extension-methods f# generic-type-argument type-constraints

10
推荐指数
2
解决办法
1354
查看次数

为什么动态调用返回动态结果?

public string Foo(object obj) {
    return null;
}

public string Foo(string str) {
    return null;
}

var x = Foo((dynamic) "abc");
Run Code Online (Sandbox Code Playgroud)

为什么x动态,编译器不够智能或者我错过了重要的东西?

c# language-design .net-4.0 c#-4.0

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

从C#调用CreateProcessAsUser

我一直在尝试使用CreateProcessAsUserWindows API 的功能在特定用户的上下文中创建一个新进程,但似乎遇到了一个相当讨厌的安全问题......

在我进一步解释之前,这里是我正在使用的代码来启动新进程(一个控制台进程 - PowerShell具体,尽管它无关紧要).

    private void StartProcess()
    {
        bool retValue;

        // Create startup info for new console process.
        var startupInfo = new STARTUPINFO();
        startupInfo.cb = Marshal.SizeOf(startupInfo);
        startupInfo.dwFlags = StartFlags.STARTF_USESHOWWINDOW;
        startupInfo.wShowWindow = _consoleVisible ? WindowShowStyle.Show : WindowShowStyle.Hide;
        startupInfo.lpTitle = this.ConsoleTitle ?? "Console";

        var procAttrs = new SECURITY_ATTRIBUTES();
        var threadAttrs = new SECURITY_ATTRIBUTES();
        procAttrs.nLength = Marshal.SizeOf(procAttrs);
        threadAttrs.nLength = Marshal.SizeOf(threadAttrs);

        // Log on user temporarily in order to start console process in its security context.
        var hUserToken = IntPtr.Zero; …
Run Code Online (Sandbox Code Playgroud)

c# privileges winapi process createprocessasuser

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

如何将位转换为字节?

我有一个128个布尔数组,代表位.如何将这128位表示转换为16字节?

例:

我有一个看起来像这样的数组:

0110001100110000100010111011001011010011010001010001101101001100
1000010000000000001000111111111101000011111001111011111011111001
Run Code Online (Sandbox Code Playgroud)

(转换为1和0更简洁)

我需要将这些位转换为以下字节数组:

99 48 139 178 211 69 27 76 132 0 35 255 67 231 190 249
Run Code Online (Sandbox Code Playgroud)

编辑:这似乎不起作用:

public byte[] ToByteArray() {
    int numBytes = Count / 8;

    if (_bits.Count % 8 != 0) numBytes++;

    byte[] bytes = new byte[numBytes];

    int byteIndex = 0, bitIndex = 0;

    for (int i = 0; i < _bits.Count; i++) {
        if (_bits[i])
            bytes[byteIndex] |= (byte)(1 << bitIndex);

        bitIndex++;
        if (bitIndex == 8) {
            bitIndex = 0;
            byteIndex++; …
Run Code Online (Sandbox Code Playgroud)

c# byte bit-manipulation

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