Click here to Skip to main content
Click here to Skip to main content

Building a Mixed-Mode Sampling Profiler

By , 9 Sep 2012
 
MixedModeProfiler_demo-noexe.zip
MixedModeProfiler_demo
MixedModeProfiler_demo.zip
CppCliApp.exe
DiagProfiler.dll
DiagProfilerClient.dll
DiagProfilerConsole.exe
DiagProfilerLauncher.exe
MixedModeProfiler_src.zip
MixedModeProfiler_src
DiagProfiler
DiagProfiler
DiagProfiler.aps
DiagProfiler.vcxproj.filters
DiagProfiler.vcxproj.user
Exports.def
IDiagProfiler.tlb
DiagProfilerClient
app.ico
DiagProfilerClient.vcxproj.filters
DiagProfilerClient.vcxproj.user
DiagProfilerConsole
DiagProfilerConsole.vcxproj.filters
DiagProfilerConsole.vcxproj.user
DiagProfilerLauncher
Properties
Settings.settings
sdk
inc
lib
dbgeng.lib
dbghelp.lib
engextcpp.lib
SampleApps
CppCliApp
app.ico
CppCliApp.vcxproj.filters
CppCliApp.vcxproj.user
// ----------------------------------------------------------------------------------------------
// Copyright (c) Mattias H�gstr�m.
// ----------------------------------------------------------------------------------------------
// This source code is subject to terms and conditions of the Microsoft Public License. A 
// copy of the license can be found in the License.html file at the root of this distribution. 
// If you cannot locate the Microsoft Public License, please send an email to 
// dlr@microsoft.com. By using this source code in any fashion, you are agreeing to be bound 
// by the terms of the Microsoft Public License.
// ----------------------------------------------------------------------------------------------
// You must not remove this notice, or any other, from this software.
// ----------------------------------------------------------------------------------------------


#pragma once
#include "PipeServerAsync.h"
#include "ProfilerCommand.h"
#include <string>
#include <map>


typedef std::map<std::string, ProfilerCommand*> TStrCmdMap;
typedef std::pair<std::string, ProfilerCommand*> TStrCmdPair;

class ProfilerCommandServer
{
	PipeServerAsync m_pipeServer;
	HANDLE m_threadHandle;
	DWORD m_threadId;
	BOOL m_stopping;
	HANDLE m_event;
	TStrCmdMap m_commandMap;

public:
	ProfilerCommandServer();
	~ProfilerCommandServer();
	BOOL IsRegistered(std::string& command);
	BOOL IsRegistered(const char* command);
	BOOL RegisterCommand(const char* name, PrfCmdFuncBoolStringVoid action);
	BOOL RegisterCommand(const char* name, PrfCmdFuncBoolStringString function);
	//BOOL RegisterCommand(const char* name, PrfCmdMethBoolStringVoid action);
	//BOOL RegisterCommand(const char* name, PrfCmdMethBoolStringString function);
    BOOL ExecuteCommand(std::string& name, std::string& result);
	BOOL Start(DWORD timeout);
	BOOL Stop();
	BOOL Run();
	BOOL IsRunning();
	BOOL Receive(std::string& message);
	BOOL Send(std::string& message);
	BOOL Pulse();
	DWORD GetThreadId();
};

By viewing downloads associated with this article you agree to the Terms of use and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)

About the Author

Mattias Högström
Software Developer Visma
Sweden Sweden
Mattias works at Visma, a leading Nordic ERP solution provider. He has good knowledge in C++/.Net development, test tool development, and debugging. His great passion is memory dump analysis. He likes giving talks and courses.

Permalink | Advertise | Privacy | Mobile
Web04 | 2.6.130617.1 | Last Updated 9 Sep 2012
Article Copyright 2012 by Mattias Högström
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid