|
Hi
I don't use that code for singleton.
You can use locki or boost and also you can read the Modern C++ design written by Andrei Alexandrescu.
Here is my usual singleton code(from the andrei book you can find it at amazon):
#pragma once
template<class Object>
class DefaultCreate{
private:
static Object * _object;
public :
static Object * Create()
{
_object= new Object;
return _object;
}
static void Destroy()
{
delete _object;
}
};
template<class Object>
Object * DefaultCreate<Object>::_object;
template<class SingletonObject,class CreatePolicy=DefaultCreate<SingletonObject> >
class Singleton
{
public:
static SingletonObject & Instance()
{
if(m_singleInstance==NULL)
{
m_singleInstance=CreatePolicy::Create();
atexit(CreatePolicy::Destroy);
}
return *m_singleInstance;
}
private:
~Singleton(void);
Singleton(void);
Singleton(Singleton &);//no copy allowed
Singleton & operator =(const Singleton&);
static SingletonObject * m_singleInstance;
};
template<class SingletonObject,class CreatePolicy>
SingletonObject * MTHSingleton<SingletonObject,CreatePolicy>::m_singleInstance=NULL;
and here is how i declare an object in singleton
class CMsgHndlr
{
void SayHello(){ cout<<"Hello theos"<<endl;
}
typedef Singleton<CMsgHndlr> test;
void gigi()
{
test::Instance().SayHello();
}
Hope this help
/theos
|
|
|
|
|
I have a question regarding Slow StretchBlt when Video Full Hardware Acceleration
is Enabled in WIndows XP.
Here is my computer's spec, (also on a Dell P4 2gHz)
AMD AthlonXP 2000+
512MB DDR266
WD 7200 40GB HD +8MB Cache
GeForce 4MX 440 64MB AGP 4x
Windows XP+SP1a+All current updates
Visual C++ 6 +SP5
I have noticed that when i switch off HW Acceleration that is set to NONE (Display
Prop>Advanced>Troubleshoot>Video HW Acceleration>None) i get faster drawing on
screen with StretchBlt upto 4-6times faster. When i switch HW Acceleration to
FULL, the drawing becomes slower. Here is a sample code that opens a CAPTURE.bmp
file of 360x360 pixel and StretchBlts to screen.
//-------------------------------------------------------
void CSlowBltDlg::OnOK()
{
//timer
CElapsed m_el;
CDC memDCLoad;
CDC *pDC;
CBitmap m_bmpBitmap;
pDC = this->GetDC();
int x_width=360;
int y_height=360;
pDC->SetStretchBltMode(COLORONCOLOR);
LoadBitmap(this,&memDCLoad);
//start timer
m_el.Begin();
pDC->StretchBlt(20,30,200,200,&memDCLoad,0,0,x_width,y_height,SRCCOPY);
//end timer and show on screen
m_el.End();
CString szTime;
szTime.Format("Time = %.3fms", m_el.m_dElapsed*1000);
pDC->TextOut(10, 10, szTime);
}
void LoadBitmap(CSlowBltDlg *myDlg, CDC *memDCLoad)
{
CDC *pDC;
CBitmap m_bmpBitmap;
pDC = myDlg->GetDC();
CString m_sBitmap;
memDCLoad->CreateCompatibleDC(pDC);
static char BASED_CODE szFilter[] = "Bitmap Files (*.bmp)|*.bmp||";
// Create the File Open Dialog
CFileDialog m_ldFile(TRUE, "*.bmp", m_sBitmap,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter);
if (m_ldFile.DoModal() == IDOK)
{
m_sBitmap = m_ldFile.GetPathName();
HBITMAP hBitmap =(HBITMAP)::LoadImage(AfxGetInstanceHandle(),m_sBitmap,IMAGE_BITMAP,0,0,
LR_LOADFROMFILE|LR_DEFAULTCOLOR);
if(hBitmap)
{
if(m_bmpBitmap.DeleteObject())
m_bmpBitmap.Detach();
m_bmpBitmap.Attach(hBitmap);
}
memDCLoad->SelectObject(&m_bmpBitmap);
}
}
//Timing requires CElapsed class available in zip file.. see below
//-------------------------------------------------------
With HW Acc. Full= 6.01ms
With HW Acc. None= 0.8ms
Isnt HW Acc. supposed to make drawing faster? Please comment. I am doing a
realtime image processing program and time is crucial. My current program
StretchBlts with other processing takes 252ms per frame of an image captured from
somewhere (360x360 px) on a Dell Pentium 4 2Ghz with ATI Rage 64MB card(not sure
the card type but it is ATI). Switching of HW Acceleration yields a supprising
result of only 63ms per frame at same dpi. Why is that so? Frame capture is choppy
with HW Acce ON. Is there something i must do to my app to take full advantage of
HW Acc? Thanks
The complete source & exe also available here
http://ucsnet.hypermart.net/SlowBlt.zip
|
|
|
|
|
Hello
Here at work I have inherited an mfc dll project for Visual Studio.net.
When it builds in debug mode both the dll and lib files are created successfully.
But when i build in release mode only the dll is built and not the lib file.
I was wondering if anyone had any suggestions as to how to get visual studio.net to create the missing lib file when i do a release build.
regards
Bryce
---
Publitor, making Pubmed easy.
http://www.sohocode.com/publitor
|
|
|
|
|
|
|
Hi
I want to start a totally new project using MFC or C#.
I need to have a good database environment which allows multi-user interaction so more then 1 user can run the program and do updates/deletes in the database.
What kind of database would be the best to use for this matter?
I used to use CodeBase (DBase IV) files, but that's out-of-date in my opinion + i can't force the clients to have MsAccess installed for example. Needs to work on Windows95+ until Win2003 computers.
If the environment is free .. that's an advantage too ofcourse !
Any suggestions?
Greetings,
Jens
|
|
|
|
|
One choice that comes immediately to mind is SQL Server. I'm not sure about it working with Win95, but I believe it works with Win98 and later. Your users don't need to have SQL Server installed, as you can freely distribute MSDE with your application, and MSDE will process the SQL Server commands you use.
Heard in Bullhead City - "You haven't lost your girl - you've just lost your turn..." [sigh] So true...
|
|
|
|
|
HI All
I planned to write some string into the string table of an executable file's resource and then fetch it out.
Below are my code
int main(int argc, char* argv[])
{
HANDLE hResource;
hResource = BeginUpdateResource("c:\\setupexe\\debug\\setupexe.exe", true);
//Update the resources
TCHAR testStr[] = "aaaa";
if (NULL != hResource)
{
if (UpdateResource(hResource,
RT_STRING,
MAKEINTRESOURCE(106),
MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
testStr,
sizeof(testStr)/sizeof(testStr[0])) != FALSE)
{
EndUpdateResource(hResource, FALSE);
}
}
//Getting the resource
HRSRC hRes;
HMODULE hLibrary;
hLibrary = LoadLibrary("c:\\setupexe\\debug\\setupexe.exe");
TCHAR strBuffer[256] = "\0";
hRes = FindResource(hLibrary, MAKEINTRESOURCE(106), RT_STRING);
if (NULL != hRes)
{
int errorCode = LoadString(hLibrary, 1680, strBuffer, 256);
}
FreeLibrary(hLibrary);
return 0;
}
The point is:
I can't not get the string I just put in there. What I've got are just garbage characters.
I would appreciate if you could give my any hints about this.
Thanks
-Paul
|
|
|
|
|
This is a _PAIN_
Strings are not stored in that way in the resource table, they are stored in string blocks. The value you pass to UpdateResource is the number of the string block you wish to update, not the string...
Each block consists of 16 strings, and is layed out in memory like this:
WORD LENGTH1
TEXT STING1
WORD LENGTH2
TEXT STRING2
etc.
You find the string block you want with the following formula
nBlockID = (nStringID / 16) + 1;
Thats not all there is too it though, as you have to pass a pointer to a block of memory to updateresource that represents a string _block_ not just the string, and you have to build that block of memory up your self.
It really is sh*t.
Thankfully, there is an example in MSDN.
Search for Stablupd.exe and you will find a sample that does just what you want, study it, then shout at M$.
|
|
|
|
|
Hi Diddy
Many thanks. I've found the sample code. It works. However, just as you've mentioned, this is really terrible to use.
Thanks again for your help
-Paul
|
|
|
|
|
No Problem
I tried to do a very simply app that had a config program with it that just set a couple of string entrys in the table ages ago, had about 3 months of searching till I found that then gave up because it's so damm naff.
|
|
|
|
|
dear ll,
is there any api which can be used to get info about the system.....i.e.
processor details, cpu temp, fan speed and motherboard information?
Regards and Thnx
rIsHaBh
|
|
|
|
|
For getting Processor information and processor features, use
GetSystemInfo () and IsProcessorFeaturePresent () functions.
But dont know how to get the cpu temp and fan speed.
Regards,
Jijo
________________________________
Yesterday is history,
Tomorrow is a mystery,
But today is a present.
|
|
|
|
|
i know the problem, but windows doesn't provide any API for getting this special information.
Don't try it, just do it!
|
|
|
|
|
Hi,
TAB Messages from child dialog is not going to child dialogs message queue,but it is to the parent windows!! So whenever TAB is pressed parent window gets the focus. How to get the control to the child dialog itself!
With Best Regards,
A.Ilamparithi
|
|
|
|
|
In MFC or Win32? If Win32 are the dialogs modeless or modal? If modeless, are you calling IsDialogMessage in your message loop?
|
|
|
|
|
Hi,
If I have two doc/views and I have some data in the second viewor document.
How do I get the data from the second view document if I am currently in the first view/document.
I must be doing the dynamic_cast wrong as it is non null but I can't access any local data from the class. Has any one got a small code fragment that explains how to get to another doc/view when inside a doc/view using the CDocTemplate stuff?
I used GetDocTemplate etc but now I would to get to the current view.
Thanks,
flip
|
|
|
|
|
Not sure if this is what you need to do.
In your document object use GetDocTemplate() . You can then iterate all the open documents of that type using GetFirstDocPosition() and GetNextDoc() . You can compare the returned pointer to this to see if you are looking at yourself. Once you have the pointer(s) to the other doc(s), you can iterate them for their view(s) using GetFirstViewPosition() and GetNextView()
If you are starting in the view, you need to use GetDocument() first of all.
Roger Allen - Sonork 100.10016
Roger Wright: Remember to buckle up, please, and encourage your friends to do the same. It's not just about saving your life, but saving the quality of life for those you may leave behind...
|
|
|
|
|
Hello guys,
I am having this problem to access (more specifically, to change text) the statusbar directly or indirectly in a MFC worker thread of my dialogue-based application.
The status bar was firstly created in my main dialogue class' OnInitDialog().
m_statusbar.Create(this);
m_statusbar.SetIndicators(indicators, 2);
m_statusbar.GetStatusBarCtrl().SetBkColor(RGB(180,180,180));
m_statusbar.SetPaneText(0, "Offline");
SetTimer(100, 1000, NULL);
The m_statusbar is a CStatusBar type member in the class declaration.
CStatusBar m_statusbar;
As I need to change the text in some functions in other classes and threads, I tried to make the statusbar accessible globally by having
pStatusBar = &m_statusbar;
also in the OnInitDialog, where CStatusBar *pStatusBar is declared as a global variable.
While there was no problem with compilation, but I'd encounter assertion error if I try to use pStatusBar to change text of the statusbar in the thread function, whether directly or indirectly (uses the change statusbar text function in other class), examples below:
UINT doPrintingProc(LPVOID param)
{
COtherDlg *ptr = (COtherDlg *)param;
pStatusBar->SetPaneText(0, "Testing");
ptr->ChangeStatusText("Testing");
}
I use the similiar way to manipulate the globally accessible CListView and CEdit text box, all seem to have no problem.
Would appreciate if someone could point out where I have done wrong.
|
|
|
|
|
I suspect your CStatusBar is doing a sanaty check and your blowing up in a ASSERT_VALID(this) call somewhere in CStatusBar. One of the things MFC classes often do is check for themselvs in handle maps when you call various mathods on them - the long and short of it is not all MFC classes can be passed around between threads in this way, and there is nothing you can do about it directly.
what you have to do is to use messages to communicate between the threads.
Declare a custom message:
#define WM_CHANGESBTEXT WM_USER+0x400
Add a hander for it to your dialog:
class CMyDialog:
{
LRESULT OnChangeSBText(WPARAM, LPARAM);
.
.
.
};
Wire up the message map:
BEGIN_MESSAGE_MAP(CMyDialog...)
ON_MESSAGE(WM_CHANGESBTEXT, OnChangeSBText)
...
Then implment the method:
LRESULT CMyDialog::OnChangeSBText(WPARAM wp, LPARAM)
{
LPCTSTR pszText = (LPCTSTR)wp;
m_statusbar.SetPaneText(0, pszText );
ChangeStatusText(pszText);
return 0;
}
Then in the thread, rather than do it directly, just send a message to the main dialog
UINT doPrintingProc(LPVOID param)
{
LPCTSTR pszString = "Testing";
AfxGetMainWnd()->SendMessage(WM_CHANGESBTEXT, pszString);
}
Dont forget to use Send (not post) message if your string can go out of scope.
}
|
|
|
|
|
Thanks alot, Diddy,
it works out nicely except a small fix for me to get it compiled -
AfxGetMainWnd()->SendMessage(WM_CHANGESBTEXT, (WPARAM)pszString)
As you have pointed out, not all of MFC classes can be passed around among the threads. But for those they do work out no trouble (direct pointer passing), is it safe to do it that way and not changing to SendMessage? This brings my another question. From what I'm thinking of SendMessage() now, it allows one thread (or class etc..) to basically send command the other class to perform its specific function(s), with options to also pass some desired data along. In my case, the changing of statusbar's text is done by its belonging class (my main class) with the original statusbar member. Therefore, no confusing pointer is there. Is it correct?
Thanks again for the help
really appreciated
Johnny
|
|
|
|
|
J.B. wrote:
it works out nicely except a small fix for me to get it compiled -
Arr well, when you write code without a compiler one error isn't bad i suppos
As a general rule of thumb, it's only the classes that interact with Windows etc that will cause you problems (this isn't a golden rule by anymeans) and out of those window classes, it's the ones that are more than just a thin wrapper round the Win32 API that cause problems. For example, CEdit is just a very thin wrapper around a edit control, and works fine, as you found out CStatusBar is more than that - and gives you problems. Its usually the classes that do anything at all with handle maps that don't work - as these are always local to the thread, and since your control is subclassed (by means of a DDX_Control statment) in your main thread,it's handle resides in that threads handle map.
As for the ones that do work - yes, it is safe to use them, but - you have the usual thread issues to think about. MFC classes are thread safe at the class level, but not the object level - IE to different instaces of a the same class provide no problems, but sharing the same instance might. It really depends on your app. You may find you need to use critical sections or other thread sync primatives to protect your control across threads, but you may be able to do without. It's all about thinking about what each thread is doing to the control - usually if one thread is just updating some text in the control, and the other is showing that text, you can get away without them. Where as if both theads are say updating the control's text, you shoud use a critical section to ensure they don't access the control at the same time.
J.B. wrote:
In my case, the changing of statusbar's text is done by its belonging class (my main class) with the original statusbar member. Therefore, no confusing pointer is there. Is it correct?
Sorry, but I really don't unstand what you mean by that?! Is what correct?!
|
|
|
|
|
Diddy wrote:
J.B. wrote:
In my case, the changing of statusbar's text is done by its belonging class (my main class) with the original statusbar member. Therefore, no confusing pointer is there. Is it correct?
Sorry, but I really don't unstand what you mean by that?! Is what correct?!
Thanks for the reply again, Diddy.
As you stated here that the classes that are always local to the thread don't work well, SendMessage() can be used to let one class to tell the other class (of the statusbar member) to perfrom some functions *locally*. And so it'd work. Whereas my original method was trying the directly access the member residing in one thread from another thread. I just want to make sure I've understood that what SendMessage() actually does A communicate link where different classes or threads will talk to each other and ask to perform some local functions.
Thanks,
Johnny
|
|
|
|
|
Hi i am deveoping namespace extension and i want to have web view kinda interface on my view side, For that which interface should i implement ?
Thank You.
Toughest Steel Comes From Hottest Furnance
|
|
|
|
|
plz give me example on creating web server that can serve dynamic page. I've already succeded using CreateProcess on C++ to serve PHP page. But how can i serve ASP page? are there ASP on windows that can be treated like CGI? or I must use ISAPI filter
If i must use ISAPI to serve ASP, plz give some advise or example!
THX A LOT, I REALLY NEED IT (for school task)
donald
|
|
|
|
|