|
|
I have a static boolean :
static bool booleanValue= true;
in my stdafx.h file.
I assumed this variable would have one instance across my application. But this assumption is apparently wrong. Within different objects, this boolean has separate instances, thus voiding its use.
I.E.
------------------------------
Have a class:
#include "stdafx.h"
class Blah {
int stuff;
void doStuff() {
if (!booleanValue) {
stuff++;
}
}
};
Have another class"
#include "stdafx.h"
class AnotherClass {
int stuffedPeppers;
void intoTheAbyss() {
if (!booleanValue) {
stuffedPeppers++;
}
}
};
------------------------------
The addresses for the same variable are different (same thread).
Where am I going wrong?
|
|
|
|
|
There's an instance for every module which includes the stdafx.h header file.
Try
In stdafx.h:
extern bool booleanValue;
And in one cpp file:
static bool booleanValue= true;
|
|
|
|
|
That worked. Thanks!
Had to use just:
bool booleanValue = true;
in cpp file.
So should this be done for functions as well?
|
|
|
|
|
switang wrote: Had to use just:
bool booleanValue = true;
Yeah, I suppose static is redundant in that case
switang wrote: So should this be done for functions as well?
Yes. Declare them in the header, define them in cpp files. Unless you need specific instances
for each cpp module. In that case (file local scope) you probably wouldn't want the declaration
in the header file anyway.
Mark
|
|
|
|
|
Thanks,
...Learn'n me some'm
Now I am a C++ Master...
|
|
|
|
|
Hello,
If you need global variables and functions just use class with static public members like this:
class GlobalWrap
{
public:
static int i1;
static double d1;
static void* pv1;
};
You can add constructor and destructor for initialization and memory cleaning and use it like this:
GlobalWrap::i1;
GlobalWrap::d1;
GlobalWrap::pv1->…
Regards,
Leonid
|
|
|
|
|
Thanks.
Never thought to do it that way...thanks again.
|
|
|
|
|
Hi
I'm working in a net monitoring system, and I sending on certain events packages to a server.
But, if the net falls I need to save the packages, and when the connection is restablished send them.
So, Im saving the packages to a text file, but when I recover the packages to send them, they are in reverse order, the newest is sent before the oldest.
Is any way I can get the packages from the beginning of the file and send them and then "move" the begining of the file?
Should I approach the problem from a different side?
In resume, I need to know how is easier to save a FIFO queue to a file.
Any idea?
Thanks
|
|
|
|
|
You can fix this in 1 of 2 ways (easily). You can pop the items off to a stack and then write the stack to the file (and then just read it normally), or you can write it off in the same order you are doing it, but read it into a stack and then move it to your queue. Either case will fix your ordering problem.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
But I'll have a lot of disk operations, and I wanted to avoid them
Well, seems that I'll have to do that
Thanks a lot Zac
|
|
|
|
|
You can avoid the excess disc operations by using a vector instead of a stack and then using a bulk write/read operation so the rest of the algorithm deals with data that is in memory already.
If you decide to become a software engineer, you are signing up to have a 1/2" piece of silicon tell you exactly how stupid you really are for 8 hours a day, 5 days a week
Zac
|
|
|
|
|
Hello,
Just use serialization for Array class.
Regards,
Leonid
|
|
|
|
|
I decided to keep a linked list in memory with the packages and when the service is closed the data is saved to an encoded text file.
On service wakeup, I load the saved packages.
The only problem is if the PC is reset or suffers a power shutdown, some packages will be lost...
Thanks a lot for the feedback
|
|
|
|
|
Every time this method get called I get another GDIObject. I cant figure out which object is causing it. The HBITMAP in the return is “DeleteObject” in the calling code. Any recommendations?
Here is my code examples
HBITMAP CTE3dSatWebClient::LoadSatRender()
{
BSTR bitMapLocation;
HBITMAP SatBit;
BSTR noImagetest = SysAllocString(L"no image");
LPCTSTR SatLoadFile;
char szBuffer[256];
sprintf(szBuffer, "CTE3dSatWebClient::LoadSatRender running ");
LogDebugInfo(szBuffer);
if( !m_pSatMap )
return 0;
bitMapLocation = m_pSatMap->SaveImageToFile();
if(bitMapLocation == noImagetest)
{
sprintf(szBuffer, "CTE3dSatWebClient::LoadSatRender LoadImage returned failure ");
LogDebugInfo(szBuffer);
return 0;
}
CString csTmpBuff = bitMapLocation;
SatLoadFile = csTmpBuff;
SatBit = (HBITMAP)LoadImage(0, SatLoadFile, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE);
sprintf(szBuffer, "CTE3dSatWebClient::LoadSatRender LoadImage Complete ");
LogDebugInfo(szBuffer);
remove(SatLoadFile);
sprintf(szBuffer, "CTE3dSatWebClient::LoadSatRender SatLoadFile Removed ");
LogDebugInfo(szBuffer);
SysFreeString(bitMapLocation);
SysFreeString(noImagetest);
return SatBit;
}
Thanks
Programmer
Glenn Earl Graham
Austin, TX
|
|
|
|
|
Is your HBITMAP selected into the device context when you call DeleteObject? That would definitely cause a resource leak.
- S
50 cups of coffee and you know it's on!
|
|
|
|
|
Yes the calling code is as follows
hbm = m_pSatMemMap->LoadSatRender();
...
hOldBitmap = (HBITMAP)SelectObject(dcImage, (HGDIOBJ)hbm);
...
if ( hOldBitmap != NULL )
SelectObject(dcImage, hOldBitmap);
if ( hbm != NULL )
{
if ( !DeleteObject(hbm) )
Programmer
Glenn Earl Graham
Austin, TX
|
|
|
|
|
Hmmm, I don't see anything wrong your code. I assume you traced in debug mode, and it's actually calling DeleteObject.
Is SaveImageToFile creating any gdi objects (not sure why it would, just a thought)?
- S
50 cups of coffee and you know it's on!
|
|
|
|
|
I inserted a for loop just before
bitMapLocation = m_pSatMap->SaveImageToFile();
no effect.
Then I put one in front of the
hbm = m_pSatMemMap->LoadSatRender();
and the GDIObject leak was one for every call.
I'm pretty sure its this method.
I thought it might be the loadimage function
Thanks for you help
Programmer
Glenn Earl Graham
Austin, TX
|
|
|
|
|
On your for loop in front of LoadSatRender(), we're you calling DeleteObject()?
Just for fun, in your calling routine, change:
if ( hOldBitmap != NULL )<br />
SelectObject(dcImage, hOldBitmap);<br />
to just:
SelectObject(dcImage, hOldBitmap);<br />
(i.e. remove the if statement )
and see if that has any effect.
- S
50 cups of coffee and you know it's on!
|
|
|
|
|
had no effect.
Programmer
Glenn Earl Graham
Austin, TX
|
|
|
|
|
Check out this thread...GDI handle count[^]
Is there caching in the system? Is task manager's reporting wrong? Enquiring minds want to know!
Mark
|
|
|
|
|
Sorry, I'm fresh out of ideas, without seeing more of the source.
- S
50 cups of coffee and you know it's on!
|
|
|
|
|
I'll keep looking thanks for your time and suggestions. I really appricate it.
Programmer
Glenn Earl Graham
Austin, TX
|
|
|
|
|
Hi
I am trying to understand
BOOL SetProp( HWND hWnd,
LPCTSTR lpString,
HANDLE hData
);
and
HANDLE GetProp(HWND hWnd,
LPCTSTR lpString
);
functions.MSDN writes:
The GetProp function retrieves a data handle from the property list of the specified window
The SetProp function adds a new entry or changes an existing entry in the property list of the specified window
But what is the meaning of "propery list"?Where is it?Is it WNDCLASSEX's members or something else?
I dont understand the benefits of window properties and window propert list.Please help me.
Thanks...
|
|
|
|