小编Ste*_*eve的帖子

超时模式 - Thread.Abort真的有多糟糕?

我在各种网站上看到Thread.Abort不是很好用.在这种情况下,如何实现超时模式?例如,我已经读过MS在整个框架中使用下面的模式(我已经用扩展方法包装).就个人而言,我认为这是一个非常酷的扩展,但我担心Thread.Abort.有没有人有更好的方法?

 public static bool CallandWait(this Action action, int timeout)
    {
        Thread subThread = null;
        Action wrappedAction = () =>
        {
            subThread = Thread.CurrentThread;
            action();
        };

        IAsyncResult result = wrappedAction.BeginInvoke(null, null);

        if (((timeout != -1) && !result.IsCompleted) && (!result.AsyncWaitHandle.WaitOne(timeout, false) || !result.IsCompleted))
        {
            if (subThread != null)
            {
                subThread.Abort();
            }

            return false;
        }
        else
        {
            wrappedAction.EndInvoke(result);
            return true;
        }
    }
Run Code Online (Sandbox Code Playgroud)

c# extension-methods multithreading

5
推荐指数
2
解决办法
3744
查看次数

使用foreach的奇怪的lock()行为

所以,这不是我的代码,并且已缩短以显示行为,但它给出了非常意外的结果.

我在一个类和一个锁中有两个函数

object mylock = new object();
List<string> temp = new List<string>();

Func1(string)
{
  lock(mylock)
  {
    temp.Add(string);
  }
}

Func2()
{
  lock(mylock)
  {
    temp.ForEach(p => Func1(p));
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,我知道这没有意义,但是当调用Func2时,不应该Func1死锁吗?在我们的例子中,它执行.谢谢.

c# multithreading

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

linq到xml - 摆脱空白的xmlns

我正试图摆脱我的xml文件中的空命名空间标签.我见过的所有解决方案都是从头开始创建xml.我有从前面的xml构造的各种xelements.我正在做的就是

XElement InputNodes = XElement.Parse(InputXML);
m_Command = InputNodes.Element("Command");
Run Code Online (Sandbox Code Playgroud)

它在任何地方添加xmlns ="".这真是令人生气.谢谢你的帮助.

c# xml linq

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

forward declare typedef'd struct

我无法弄清楚如何转发声明一个Windows结构.定义是

typedef struct _CONTEXT
{
 ....
} CONTEXT, *PCONTEXT
Run Code Online (Sandbox Code Playgroud)

我真的不想进入这个标题,因为它包含在任何地方.

我试过了

struct CONTEXT

struct _CONTEXT

没有运气(在winnt.h中使用actuall结构重新定义基本类型.

c++ forward-declaration

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

如何检查C++副本椭圆

我 在C++中遇到了关于复制椭圆的这篇文章,我在boost库中看到过关于它的评论.这很有吸引力,因为我更喜欢我的功能

verylargereturntype DoSomething(...)
Run Code Online (Sandbox Code Playgroud)

而不是

void DoSomething(..., verylargereturntype& retval)
Run Code Online (Sandbox Code Playgroud)

所以,我有两个问题

  1. 谷歌几乎没有这方面的文件,这有多真实?
  2. 如何检查此优化是否确实发生?我认为这涉及到看装配,但我只想说这不是我的强项.如果有人能给出一个非常基本的例子,说明成功的椭圆形是什么样的,那将是非常有用的

我不会仅仅使用复制椭圆来美化事物,但如果能保证它能够起作用,那么它听起来非常有用.

c++ optimization

4
推荐指数
2
解决办法
351
查看次数

PsExec:将我的程序复制到“system32”文件夹中

我无法让 PsExec 工作。它不断将我的安装程序复制到 system32(它不会启动)。有谁知道如何从本地到远程计算机复制到不是 system32 的目录?我的 PsExec 命令行是

psexec \\000.00.00.000 -f -u DOMAIN\meuser -p testpwd -c ..\Installer\test.exe /S
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激。

编辑:它不会启动,因为我对计算机没有完全的管理权限。它将从其他目录启动

psexec

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

具有32位VB6 COM对象的64位C#

我有一个32位进程内STA VB6 DLL.我遗憾地对此无能为力.我的C#组件大大受益于64位.无论如何从我的64位进程调用/接口这个32位dll?任何类型的包装或任何东西?

c# vb6 com interop

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

c ++模板转换

我在如何投射模板方面有点迷失.我有一个函数foo,它接受一个类型的参数ParamVector<double>*.我想传入一个ParamVector<float>*,我无法弄清楚如何为我的ParamVector课程重载强制转换操作符,谷歌并没有帮助我那么多.有没有人有如何做到这一点的例子?谢谢.

编辑:添加一些代码,抱歉,我是一个白痴,并没有很好地说出原始问题;

template<class T> class ParamVector 
{
public:
    vector <T> gnome;
    vector <T> data_params;
}

template<class T> class ParamVectorConsumer
{
 public:
 ParamVector<T> test;
}

ParamVector<float> tester;
ParamVectorConsumer<double> cons;
cons.ParamVector = tester
Run Code Online (Sandbox Code Playgroud)

将无法编译.我想知道如何编写它以便我可以将float版本的测试器转换为ParamVector double.谢谢

EDIT2:施法是错误的.我不介意编写额外的代码,我只需要知道如何让编译器接受它,以便我可以编写某种转换代码.

c++ templates

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

vs2008中的线程窗口在哪里

我试图在这里这里描述的VS 2008中找到线程窗口,但我无法在任何地方找到它.我查看了View并且没有看到任何类似的东西.这似乎非常有用.谢谢你的帮助

编辑:是的我正在调试编辑:谢谢,我找到了!

ide visual-studio-2008

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

C#对象创建比构造函数调用慢得多

对于我的生活,我无法弄清楚我的代码中的性能影响.我有一个容器对象,我在其中测量运行构造函数(下面的对象)所需的时间,公共构造函数中的计时代码

 public class WorkUnit : IWorkUnit
{
    private JobInformation m_JobInfo;
    private MetaInfo m_MetaInfo;
    private IPreProcJobInfo m_PreprocDetails;


    readonly private Guid m_ID;
    private Guid m_ParentID;
    private Guid m_MasterJobID;


    private string m_ErrorLog = string.Empty;
    private PriorityKeeper m_Priority;
    private WorkUnitClassification m_Classification;

    private IJobPayload m_CachedPayload;
    private IJobLogger m_Logger;
    private EventHandler<JobEventArgs> m_IsFinished;
    private ReaderWriterLockSlim m_Lock;

    public WorkUnit(string InputXML, Guid JobID, IJobLogger Logger)
    {
        DateTime overstarttime = DateTime.Now;

        try
        {
        ....Do Stuff....
        }
        catch(XMLException e)
        {...}
        catch(Exception e)
        {
         ...
         throw;
        }

        double time = (DateTime.Now - …
Run Code Online (Sandbox Code Playgroud)

c# performance

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