小编Car*_*rra的帖子

在Windows中休眠一个进程

是否有任何库或软件或任何方法将Windows中单个进程的状态保存到文件中,然后将运行进程恢复到运行状态,以后所有内存都已加载?

我知道打开的句柄必须重新打开,线程可能必须启动等,但是堆和单个线程堆栈至少可以恢复吗?

我看到了这个问题,但答案都是针对linux的,大多数人都认为无法完成.

我知道我可以将所有数据结构序列化并自己完成,但我想知道如果没有它可行.

windows process process-migration

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

C#条件记录/跟踪

我想在我的C#应用​​程序中添加日志记录或跟踪,但是如果将日志详细级别设置得太低以至于不记录消息,我不希望记录格式化字符串或计算值的开销.

在C++中,您可以使用预处理器来定义将阻止代码执行的宏,如下所示:

#define VLOG(level,expr) if (level >= g_log.verbosity) { g_log.output << expr; }
Run Code Online (Sandbox Code Playgroud)

像这样使用:

VLOG(5,"Expensive function call returns " << ExpensiveFunctionCall());
Run Code Online (Sandbox Code Playgroud)

你是怎么用C#做的?

我读过的微软文档解释了跟踪和调试设施在这里,他们声称,使用和#undef DEBUG和#undef TRACE删除所有从生产的可执行文件跟踪和调试代码,但它真的删除整个通话?意思是,如果我写的话

System.Diagnostics.Trace.WriteLineIf(g_log.verbosity>=5,ExpensiveFunctionCall());
Run Code Online (Sandbox Code Playgroud)

如果我取消定义TRACE,它不会调用我昂贵的功能吗?或者是打电话,然后决定它不会追踪任何东西?

无论如何,即使它确实删除它,这也不如C++宏,因为我无法使那个大丑陋的调用看起来像我在C++中的简单VLOG()调用,仍然可以避免评估参数,是吗?我也不能像在C++中那样在运行时定义详细程度来避免开销,对吧?

c# logging trace

8
推荐指数
2
解决办法
9164
查看次数

从C#客户端调用远程COM + ServicedComponent

我有一个服务组件安装在COM +服务器应用程序中.我想从远程客户端创建一个实例.客户端需要能够动态指定服务器计算机的名称.我该怎么做呢?

我尝试过使用Activator:

            (XSLTransComponent.XSLTransformer)Activator.GetObject(
                        typeof(XSLTransComponent.XSLTransformer),
                        serverName
                        );
Run Code Online (Sandbox Code Playgroud)

但我明白了:

System.Runtime.Remoting.RemotingException:无法创建通道接收器以连接到URL"服务器".可能尚未注册适当的频道.在System.Runtime.Remoting.RemotingServices.Unmarshal(类型classToProxy,String url,Object data)

我需要注册一个频道吗?如果是这样,怎么样?

另一个想法是使用Marshall.BindToMoniker,但是如何为服务器x上的COM +上托管的远程对象指定名字对象?

.net com+

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

WriteFile是原子的吗?

我正在设计一个将时间序列数据写入文件的系统.数据是8个字节的块,分为两个4字节部分,时间和有效负载.

根据MSDN,WriteFile函数是原子的(http://msdn.microsoft.com/en-us/library/aa365747(VS.85).aspx),如果写入的数据小于扇区的大小.

由于文件只包含这些块(文件没有"结构",因此无法重建损坏的文件),一个接一个地添加,因此整个块或者没有任何内容写入文件是至关重要的.一直.

所以问题是,我是否正确地理解了,无论在实际调用writefile期间发生了什么,一个小于扇区的写文件总是完全写入磁盘或根本不写入?

ntfs writefile visual-c++

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

为什么Visual C++编译器在这里调用错误的重载?

为什么Visual C++编译器在这里调用错误的重载?

我有一个ostream的子类,我用它来定义格式化的缓冲区.有时我想创建一个临时的,并立即插入一个字符串,使用通常的<<运算符,如下所示:

M2Stream() << "the string";
Run Code Online (Sandbox Code Playgroud)

不幸的是,程序调用运算符<<(ostream,void*)成员重载,而不是运算符<<(ostream,const char*)非成员.

我将下面的示例编写为测试,我在其中定义了自己的M2Stream类来重现问题.

我认为问题是M2Stream()表达式产生一个临时的,这在某种程度上导致编译器更喜欢void*overload.但为什么?事实证明,如果我为非成员重载const M2Stream&做第一个参数,我就会产生歧义.

另一个奇怪的事情是,如果我首先定义一个const char*类型的变量然后调用它而不是文字字符串字符串,它会调用所需的const char*重载,如下所示:

const char *s = "char string variable";
M2Stream() << s;  
Run Code Online (Sandbox Code Playgroud)

就好像文字字符串的类型不同于const char*变量!它们不应该是一样的吗?当我使用临时字符串和字符串字符串时,为什么编译器会调用void*重载?

#include "stdafx.h"
#include <iostream>
using namespace std;


class M2Stream
{
public:
    M2Stream &operator<<(void *vp)
    {
        cout << "M2Stream bad operator<<(void *) called with " << (const char *) vp << endl;
        return *this;
    }
};

/* If I make first arg const M2Stream &os, I get
\tests\t_stream_insertion_op\t_stream_insertion_op.cpp(39) : error C2666: 'M2Stream::operator <<' : …
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading temporary visual-c++

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