|
Newer versions of the database need DAO Version 3.6
You can get this by installing the latest Microsoft database Access Components (if you haven't already done so) but MFC6 still won't use it. You have to mess around a little to fool it into using the right version. There's a kb article somewhere but the following code might show you enough. (Just translate the pjpRegKey::CRegKey to your own method of registry access.)
bool CDatabaseHandler::DAO36Fix()
{
bool bRet = false;
if (AfxGetModuleState()->m_dwVersion == 0x600)
{
PJPreg::CRegKey regkey(HKEY_CLASSES_ROOT, "CLSID\\{00000100-0000-0010-8000-00AA006D2EA4}\\InprocServer32");
CString csPath;
regkey.GetStringValue("", csPath);
if (!csPath.IsEmpty())
{
if (0 == _access(csPath, 0))
{
AfxGetModuleState()->m_dwVersion = 0x601;
bRet = true;
}
}
}
return bRet;
}
Just call this function once during your app's initialisation before you try to open the db.
Hope this helps...
Phil J Pearson
|
|
|
|
|
Hi,
i'd like to know if it is possible to determine the cpu time given to a process ? (or the percentage of cpu a process consumes ?)
I found a solution under windows NT, but not under 98/Me.
Thanks in advance.
Lion.
|
|
|
|
|
The short answer to this problem is NO. I was recently interested in doing this myself and have concluded this is not possible under win98/Me. Ths API functions work under nt/2k/xp only!!!
If you want the clocks used by the current process thats a little easier, but I wouldn't imagine very accurate...per function is a snap and probably dead on (depending on the method you use).
Inorder to get system wide processor useage I figure you'd have to write a device driver and record start and stop clocks between task switches. This isn't easy.
If you don't require real-time processor useage though...you can use your systems tools (system monnitor) and create a log file. Then load the log into yer app and display and view the data as nessecary.
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
<<if you="" want="" the="" clocks="" used="" by="" current="" process="" thats="" a="" little="" easier...="">>, that could be a good point of start.
with the clocks used by the curent process i could calculate the percentage of the cpu consumed by my process.
Is there a way to know the clocks used by the current process ?
Cheers,
Lion.
|
|
|
|
|
When I said clocks of the current process this was a bit of a misnomer. You can retrieve the clocks used by your own applications process. Not the process with the highest current priority or the process behind the active window.
There are several techniques available each will vary in accuracy.
1) QueryPerformanceCounter() - I have read that this techinque has is not that accurate. However it will run under Win95/NT and up.
2) clock() found in the CRT should lend itself nicely to what you want to do.
3) RTDSC intel ONLY instruction...I would argue that this is probably the most effective at returning an accurate reading of clocks expended. However side effects are...you'd have to record clocks at the start and end of each function calculate the sum and then the difference of total expended clocks to calculate percentage of CPU used by the process. Also...your code will only run on intel machines. And the is a known quirk with the RTDSC instruction that requires you to perform a cache warm-up because the instruction returns a higher count than it should on it's first execution. this can complicate matters a little.
I've never tried using the clock() of the crt, but it sounds like it returns the clocks spent of the current process...if this is true you can avoid cache warmups and recording at the start and end of each function.
Are you trying to profile your code...or just return CPU useage on a system wide basis..at first it sounded like you were trying to profile the system, but if your trying to profile your code...I would suggest going with the RTDSC method...
Cheers!
"An expert is someone who has made all the mistakes in his or her field" - Niels Bohr
|
|
|
|
|
does anyone know where i can find an implementation of the merge sort algorithm in C++.
thanks
|
|
|
|
|
|
The Problem is --Where and How to Delete the created objects with "new" Operator
Please mark the palce and solution..
i tried with somany ways but i am getting "Heap assertion"
and in Debugging mode it is showing MemoryLeak Detected
as follows:
Detected memory leaks!
Dumping objects ->
{172} normal block at 0x002F5F88, 500 bytes long.
Data: 44 3A 5C 50 72 6F 6A 65 63 74 73 5C 44 75 6D 70
and also i am getting the
First-chance exception in MyApp.exe (KERNEL32.DLL): 0x000006B5: (no name).
please give me the solution
I am very much worring about these problems please please....
This is Mycode:
I am declaring structures as follows:
1.For Database entries:
;;;;;;;;;;;;;;;;;;;;;;;
typedef struct{
char strName[MAX_PATH];
int nNumber;
int nCode;
}DB_DATA;
2:For Daily entries:
;;;;;;;;;;;;;;;;;;;;
typedef struct{
char strName[MAX_PATH];
int nNumber;
int nCode;
}DAILY_DATA;
Now i am using CTypedPtrList as follows:
1.For Database:
===============
typedef CTypedPtrList DB_DATA_LIST;
DB_DATA_LIST m_lstDbData;
2.For Initial List:
==================
typedef CTypedPtrList INITIAL_LIST;
INITIAL_LIST m_InitialList;
3.For Priority List:
====================
typedef CTypedPtrList PRIORITY_LIST;
PRIORITY_LIST m_PriorityList;
Initially i am getting all the data from database and store it in "m_lstDbData"
as follows:
############
while (EndOfFile)
{
DB_DATA * dbdata=new DB_DATA;
strcpy(dbdata->sName,rs.sName);
dbdata->nNumber=rs.nNumber;
dbdata->nCode=rs.nCode;
m_lstDbData.AddTail(dbdata);
MoveNext();
}
Preparing the InitialList as follows:
`````````````````````````````````````
Now i am checking the Dialy Register(one Text file contains record wise data) if
Daily Register values mactched with Database values then stored this values into InitialList.
do
{
POSITION nPos=m_lstDbData.GetHeadPosition();
for(int nPass=0;nPass<m_lstdbdata.getcount();++npass)
{
db_data="" *="" tempdbdata="new" db_data;=""
tempdbdata="m_lstDbData.GetAt(nPos);"
if(dialyreg="" ncode="=tempDbdata-">nCode)
{
DAILY_DATA * tempDailyData=new DAILY_DATA;
strcpy(tempDailyData->sFileName,str);
tempDailyData->nNumber=tempDbdata->nNumber;
tempDailyData->nCode=tempDbdata->nCode;
InitialList.AddTail(tempDailyData);
}//end if(DialrRegCode==tempDbdata->nCode)
m_lstDbData.GetNext(nPos);
}//end for(int nPass=0;nPass<m_lstdbdata.getcount();++npass)
}while(endof daily="" reg);="" this="" is="" do="" while="" loop=""
<<<<<<<<<<<<<<<<<<<<<<<<<="">>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Next I am preparing PriorityList according the nCode(assending):
````````````````````````````````````````````````````````````````````
while(!InitialList.IsEmpty())
{
POSITION nPos=InitialList.GetHeadPosition();
DAILY_DATA * TempHeadPosData=new DAILY_DATA;
TempHeadPosData=InitialList.GetAt(nPos);//Head Position Priority
nStuctPos=InitialList.Find(TempHeadPosData);
nHPosCode=TempHeadPosData->nCode;
for(int nIndex=0;nIndex<initiallist.getcount();nindex++)
{
daily_data *="" tempnextposdata="new" daily_data;
tempnextposdata="InitialList.GetNext(nPos);
nNextPosCode=TempNextPosData-">nCode;
if(nHPosCode>nNextPosCode)
{
nStuctPos=InitialList.Find(TempNextPosData);
int nTempHold=nHPosCode;
nHPosCode=nNextPosCode;
nNextPosCode=nHPosCode;
}//end if(nHPosCode>nNextPosCode)
else
{
if(nHPosCode==nNextPosCode)
{
//here i am doing somethine
}//end if(nHPosCode==NextPosPriority)
}//end else
}//end for(int nIndex=0;nIndex<initiallist.getcount();nindex++)
daily_data="" *="" tempnewdata="new" daily_data;
tempnewdata="InitialList.GetAt(nStuctPos);"
prioritylist.addtail(tempnewdata);
initiallist.removeat(nstuctpos);
}="" end="" while(!initiallist.isempty())
finally="" i="" am="" getting="" the="" data="" from="" prioritylist="" and="" send="" it="" to="" mydll(mydll="" do="" update="" database)=""
``````````````````````````````````````````````````````````````````````````````````````````````````
while(!prioritylist.isempty())
{
position="" pos="PriorityList.GetHeadPosition();
DAILY_DATA" filedata="new" daily_data;
filedata="PriorityList.GetAt(Pos);
strTemp.Format("%s",filedata-">szName);
nCode=filedata->nCode;
if(nCode>=1)
{
//call MyDll
PriorityList.RemoveAt(Pos);
}//end if(nCode>=1)
else
{
PriorityList.RemoveAt(Pos);
}
strTempPath=strPath;
}//end while(!PriorityList.IsEmpty())
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Now the Problem is --Where and How to Delete the created objects with "new" Operator
Please mark the palce and solution..
i tried with somany ways but i am getting "Heap assertion"
and in Debugging mode it is showing MemoryLeak Detected
as follows:
Detected memory leaks!
Dumping objects ->
{172} normal block at 0x002F5F88, 500 bytes long.
Data: 44 3A 5C 50 72 6F 6A 65 63 74 73 5C 44 75 6D 70
and also i am getting the
First-chance exception in MyApp.exe (KERNEL32.DLL): 0x000006B5: (no name).
please give me the solution
I am very much worring about these problems please please....
suma k
|
|
|
|
|
Well, here is one memory leak. You have the same bad construct in a few other places.
DB_DATA * tempDbdata=new DB_DATA;
tempDbdata=m_lstDbData.GetAt(nPos);
Why allocate a new record and then do nothing with it?
Tim Smith
I know what you're thinking punk, you're thinking did he spell check this document? Well, to tell you the truth I kinda forgot myself in all this excitement. But being this here's CodeProject, the most powerful forums in the world and would blow your head clean off, you've got to ask yourself one question, Do I feel lucky? Well do ya punk?
|
|
|
|
|
Thanks for your reply
please i am very new c++ coding
In which place i do nothing for newly allocated reocrd?
|
|
|
|
|
For starters, CTypedPtrList ? MFC containers suck in every possible way. Use std::list or std::vector, then you can write functors to do things like delete pointers as you empty the list.
while(!InitialList.IsEmpty())
{
POSITION nPos=InitialList.GetHeadPosition();
DAILY_DATA * TempHeadPosData=new DAILY_DATA;
// You never delete this - why ?
TempHeadPosData=InitialList.GetAt(nPos);//Head Position Priority
nStuctPos=InitialList.Find(TempHeadPosData);
nHPosCode=TempHeadPosData->nCode;
for(int nIndex=0;nIndex{
DAILY_DATA * TempNextPosData=new DAILY_DATA;
// You never delete this - why ?
TempNextPosData=InitialList.GetNext(nPos);
nNextPosCode=TempNextPosData->nCode;
if(nHPosCode>nNextPosCode)
{
nStuctPos=InitialList.Find(TempNextPosData);
int nTempHold=nHPosCode;
nHPosCode=nNextPosCode;
nNextPosCode=nHPosCode;
}//end if(nHPosCode>nNextPosCode)
else
{
if(nHPosCode==nNextPosCode)
{
//here i am doing somethine
}//end if(nHPosCode==NextPosPriority)
}//end else
}//end for(int nIndex=0;nIndex
DAILY_DATA * TempNewData=new DAILY_DATA;
TempNewData=InitialList.GetAt(nStuctPos);
PriorityList.AddTail(TempNewData);
// This one is fine, because it gets put into the list, but it must be deleted in your destructor if not before (unless the MFC container does it for you ).
InitialList.RemoveAt(nStuctPos);
}//end while(!InitialList.IsEmpty())
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|
|
DAILY_DATA * TempNewData=new DAILY_DATA;
TempNewData=InitialList.GetAt(nStuctPos);
PriorityList.AddTail(TempNewData);
// This one is fine, because it gets put into the list, but it must be deleted in your destructor if not before (unless the MFC container does it for you ).
///+++==I am doing mistake here.Before your suggestion i am deleting the TempNewData here also.
Now i got the solution i am deleting these objects in Destructor.Once again lot of thanks you
InitialList.RemoveAt(nStuctPos);
suma k
|
|
|
|
|
DAILY_DATA * TempNewData=new DAILY_DATA;
TempNewData=InitialList.GetAt(nStuctPos);
PriorityList.AddTail(TempNewData);
// This one is fine, because it gets put into the list, but it must be deleted in your destructor if not before (unless the MFC container does it for you ).
///+++==I am doing mistake here.Before your suggestion i am deleting the TempNewData here also.
Now i got the solution i am deleting these objects in Destructor.Once again lot of thanks you
InitialList.RemoveAt(nStuctPos);
suma k
|
|
|
|
|
Can someone tell me how to get Visual Source Safe to put header comments in my source files? Like $Revision, etc like rcs does. Thanks.
|
|
|
|
|
From the Source Safe helpfile:
Keyword expansion refers to VSS's ability to place certain information directly into your file to create a file header for you. To use this feature, you place certain keywords into the text of your file in comments so that it does not affect your code. When you add or check in the file, VSS looks for these keywords, and places the relevant information after them.
Because keyword expansion requires VSS to scan each file for keywords, it can considerably slow the Check In and Add Files commands.
Note Keyword expansion is by default disabled for all files. As VSS administrator, after you have enabled keyword expansion (from the VSS Administrator program), you must tell VSS which files to scan for keywords.
To enable keyword expansion:
On the VSS Administrator Tools menu, click Options.
Click the General tab if it isn't already selected.
In the Expand Keywords in Files of Type box, enter the types of files in which you want keyword expansion to occur; for example, *.txt.
If you use more than one extension, you must separate them with commas; for example, *.txt, *.c, *.bas.
Click OK.
Note You can also enable keyword expansion by adding Keyword_Masks = *.txt to the SRCSAFE.INI file on the server. Place it before the first occurrence of a section header, for example, [$/MyProj]. Again, if you use more than one extension, separate them with commas.
The keywords that you can expand:
$Archive: $ VSS archive file location
$Author: $ User who last changed the file
$Date: $ Date and time of last checkin
$Header: $ Logfile, Revision, Date, Author
$History: $ File history, VSS format
$JustDate: $ Date, without the time addendum.
$Log: $ File history, RCS format
$Logfile: $ Same as Archive
$Modtime: $ Date and time of last modification
$Revision: $ VSS version number
$Workfile: $ File name
$NoKeywords: $ No keyword expansion for all keywords that follow
- Anders
Money talks, but all mine ever says is "Goodbye!"
|
|
|
|
|
I've heard many people say that using "using namespace std" in your programs is a bad idea. I see it in all the books I read through though .. I assume it's just because they're examples though.
I'm going to assume the reasoning is that you don't want to include anything your not going to be using .. and possible conflictions with other functions???
I've started to change all my code from:
using namespace std;
to:
using std::vector;
using std::deque;
using std::cout;
...
I am finding that the list of using ... get's quite long, hehe. But is this the right way to go? Or is it simply better to just use "using namespace std"
Travis D. Mathison ---
--- After three days without programming, life becomes meaningless ...
|
|
|
|
|
I don't use using at all. That way you know where each and every function comes from. Otherwise they're just global functions.
Consider when you use a C++ object it's usually object.method() or object->method() and not "declare some global and then call method()".
Todd Smith
CPUA 0x007 ... shaken not stirred
|
|
|
|
|
If you want to use them, go right ahead.
However, there are some cases where I wouldn't use them at ALL. Never ever ever ever ever. (Atleast in the global scope)
If you are creating a library to be used by others, NEVER expect that there has been a using issued. Never issue one yourself (excluding the rare case where you are adding namespaces to an existing library where you don't want to break existing code). Always reference the classes fully (i.e. std::vector).
The idea is that your library should never have any side effects during compilation. Issuing a using might cause other strange problems not expected by the user of your class library.
Tim Smith
I know what you're thinking punk, you're thinking did he spell check this document? Well, to tell you the truth I kinda forgot myself in all this excitement. But being this here's CodeProject, the most powerful forums in the world and would blow your head clean off, you've got to ask yourself one question, Do I feel lucky? Well do ya punk?
|
|
|
|
|
Ok, thank you both for the insight.. perhaps I shall consider using the full std::<whatever> in my code instead of "using blah".
Travis D. Mathison ---
--- After three days without programming, life becomes meaningless ...
|
|
|
|
|
That's why we use typedef's a lot (to save some keystrokes I guess?). For example:
typedef std::list<MyItem> CMyList;
Is this also an evil then?
|
|
|
|
|
This is also evil, because it makes your code illegible to people who don't have your typedefs commited to memory.
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|
|
That is why I name my typedefs consistently and 99% of the time inside a class.
typedef std::vector <CSomeClass> _vSomeClass;
Tim Smith
I know what you're thinking punk, you're thinking did he spell check this document? Well, to tell you the truth I kinda forgot myself in all this excitement. But being this here's CodeProject, the most powerful forums in the world and would blow your head clean off, you've got to ask yourself one question, Do I feel lucky? Well do ya punk?
|
|
|
|
|
This is fine as far as it goes, although IMO it adds a level of abstraction that is unnecessary (i.e. I still need to translate this on the fly as I read the document, although what you've shown is quite intuitive.
My personal opinion is that it is better for people to become accustomed to reading the only syntax that is never ambiguous. Most typedefs I've seen have used the vec/lst/map type prefixes, but created types like this
mpi2v
mpsz2w
veci1
veci2
This stuff is just a nightmare. I agree that poor use of a language feature does not dismiss the feature entirely, and in writing STL docs for work I put forward typedef as an issue for personal preference, but also explained why my preference is to avoid it.
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|
|
This is fine as far as it goes, although IMO it adds a level of abstraction that is unnecessary (i.e. I still need to translate this on the fly as I read the document, although what you've shown is quite intuitive.
Which is the exact reasons I don't some of the more basic STL functions such as for_each. Let's just say I disagree with Scott Meyers on every point. Even he admits functions such as for_each can obscure code.
Tim Smith
I know what you're thinking punk, you're thinking did he spell check this document? Well, to tell you the truth I kinda forgot myself in all this excitement. But being this here's CodeProject, the most powerful forums in the world and would blow your head clean off, you've got to ask yourself one question, Do I feel lucky? Well do ya punk?
|
|
|
|
|
Tim Smith wrote:
Let's just say I disagree with Scott Meyers on every point.
On *every* point ? I believe he advocates the typedef's we are discussing, actually.
Tim Smith wrote:
Which is the exact reasons I don't some of the more basic STL functions such as for_each.
I don't think for_each obscures code to the degree that typedefs do, and in both cases it obscures it for people other than the author.
Personally I don't use for_each that much either, I think the main reason I've used it is to delete pointers in my destructor. It is also true that my use of STL has not needed too many algorithms.
Christian
The tragedy of cyberspace - that so much can travel so far, and yet mean so little.
|
|
|
|