我在各种网站上看到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) 所以,这不是我的代码,并且已缩短以显示行为,但它给出了非常意外的结果.
我在一个类和一个锁中有两个函数
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死锁吗?在我们的例子中,它执行.谢谢.
我正试图摆脱我的xml文件中的空命名空间标签.我见过的所有解决方案都是从头开始创建xml.我有从前面的xml构造的各种xelements.我正在做的就是
XElement InputNodes = XElement.Parse(InputXML);
m_Command = InputNodes.Element("Command");
Run Code Online (Sandbox Code Playgroud)
它在任何地方添加xmlns ="".这真是令人生气.谢谢你的帮助.
我无法弄清楚如何转发声明一个Windows结构.定义是
typedef struct _CONTEXT
{
....
} CONTEXT, *PCONTEXT
Run Code Online (Sandbox Code Playgroud)
我真的不想进入这个标题,因为它包含在任何地方.
我试过了
struct CONTEXT
和
struct _CONTEXT
没有运气(在winnt.h中使用actuall结构重新定义基本类型.
我 在C++中遇到了关于复制椭圆的这篇文章,我在boost库中看到过关于它的评论.这很有吸引力,因为我更喜欢我的功能
verylargereturntype DoSomething(...)
Run Code Online (Sandbox Code Playgroud)
而不是
void DoSomething(..., verylargereturntype& retval)
Run Code Online (Sandbox Code Playgroud)
所以,我有两个问题
我不会仅仅使用复制椭圆来美化事物,但如果能保证它能够起作用,那么它听起来非常有用.
我无法让 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)
任何帮助将不胜感激。
编辑:它不会启动,因为我对计算机没有完全的管理权限。它将从其他目录启动
我有一个32位进程内STA VB6 DLL.我遗憾地对此无能为力.我的C#组件大大受益于64位.无论如何从我的64位进程调用/接口这个32位dll?任何类型的包装或任何东西?
我在如何投射模板方面有点迷失.我有一个函数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:施法是错误的.我不介意编写额外的代码,我只需要知道如何让编译器接受它,以便我可以编写某种转换代码.
对于我的生活,我无法弄清楚我的代码中的性能影响.我有一个容器对象,我在其中测量运行构造函数(下面的对象)所需的时间,公共构造函数中的计时代码
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)