小编AK_*_*AK_的帖子

c ++从容器中提升条件删除

我想做一些像c#linq风格的东西:

SomeColection <SomeType> someColection;
someColection.Remove(something => something > 2);
Run Code Online (Sandbox Code Playgroud)

并且它将删除所有大于2(或任何其他布尔条件)的东西......

在项目中使用boost ...

c++ algorithm boost

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

尝试计算派生类的实例,type_id不起作用

我想从我的班级计算所有派生的实例,我试图这样做:

.h文件:

#ifndef _Parant
#define _Parant

#include<map>

class Parant
{
public:
    Parant();
    virtual ~Parant();
    static void PrintInstances();

private:
    static void AddInstance(const char* typeName);
    static std::map<const char*, int> InstanceCounter;
};

#endif
Run Code Online (Sandbox Code Playgroud)

.cpp文件:

#include "Parant.h"
#include <typeinfo>
#include <iostream>

using namespace std;

Parant::Parant()
{
    AddInstance(typeid(this).raw_name());
}


Parant::~Parant()
{
}


std::map<const char*, int> Parant::InstanceCounter;

void Parant::AddInstance(const char* typeName)
{
    InstanceCounter[typeName]++;
}


void Parant::PrintInstances()
{
    for(map<const char*,int>::iterator i = InstanceCounter.begin(); i != InstanceCounter.end(); i++)
    {
        cout << " typename: " << i -> first …
Run Code Online (Sandbox Code Playgroud)

c++ rtti typeinfo

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

监控rs232流量

我需要监控RS232流量,我正在与硬件设备通信,我想监控该流量.理想情况下,我想要一个Wireshark进行串行通信?有什么建议 ?


它实际上通过USB进行调试,并为我提供虚拟COM接口.

MS windows ...

windows serial-port packet-sniffers

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

c ++ static不会链接

你能帮我吗?以下代码:

class MT
{
public:
    static int ms_number;

};

int MT::ms_number;
Run Code Online (Sandbox Code Playgroud)

收益率:

Error   8   error LNK2005: "public: static int MT::ms_number" 
      (?ms_number@MT@@2HA) already defined in ProjName.obj
Run Code Online (Sandbox Code Playgroud)

为什么?

c++ static linkage

0
推荐指数
1
解决办法
130
查看次数

使操作异步

我有一个实现某些服务的大型应用程序,它使用的接口是

IResult Execute(IRequest)
Run Code Online (Sandbox Code Playgroud)

它全部包含在IHttpHandler中.其中一些服务使用我想要替换的通用基础架构组件.问题是,我的组件需要很长时间才能运行,并且由于所有这些都托管在IIS服务器中,因此它将很快耗尽其工作线程.

我可以将服务包装在IHttpAsyncHandler中,但我仍然需要一种方法来异步使用我的组件,否则我将只是持有不同的工作线程.

我当然可以在它自己的线程中执行我的服务,但它非常昂贵.使用System.Threading.Tasks.Task或Delegate.BeginInvoke,只会占用另一个线程或工作线程,具体取决于实现.

理想情况下,我想如果可以的话,当我调用长时间运行的操作时,取出线程的堆栈和执行上下文,将它们放在一边,开始做我的工作(主要是IO和异步),释放线程即时使用到线程池\操作系统,完成后,将我保存的上下文放在一边,继续执行我的结果.

这在一些函数式语言中是非常可能的,或者在使用continuation时,如何在C#中实现?


在做了一些研究后,我认为我需要做的是一种延续.我需要冻结当前的执行线程堆栈,将线程释放回池中,并在我将使用的异步操作的回调上重新启动冻结的堆栈.


Justin Pihony的请求我正在添加一些代码来更好地描述我的问题.

这是我的Http Handler(当然简化):

class Handler: IHttpAsyncHandler 
{
        private readonly Action<HttpContext> _processDelegate = ProcessRequest;

        public void ProcessRequest(HttpContext context)
        {
           IBuissnessService blThing = IOC.Get(context.Something);

           // usually doesnt take too long...
           thing.DoWork(context);
        }


        public bool IsReusable
        {
            get
            {
                return true;
            }
        }

        public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
        {
            return _processDelegate.BeginInvoke(context, cb, extraData);
        }

        public void EndProcessRequest(IAsyncResult result)
        {
            _processDelegate.EndInvoke(result);
        }
}

//this is the buissness object

    class BLThing :IBuissnessService …
Run Code Online (Sandbox Code Playgroud)

.net c# multithreading asynchronous

0
推荐指数
1
解决办法
603
查看次数