|
Excellent answer! Although I would like to point out that the grow-by value is probably not 1, it is some value specified deeper in the code, and should probably be set to some appropriate value. I have actually seen C++ string arrays that where stored in a single continuous buffer with a separate array of {offset, length} pairs.
Oh well, not very important.
INTP
"Program testing can be used to show the presence of bugs, but never to show their absence."Edsger Dijkstra
|
|
|
|
|
vikram.vit wrote: Also is there any method in VC++ similar to the Join() method in VB that converts a string array to string of elements seperated by delimiters.
If, instead of the MFC containers, you used the standard template library, you could use foreach to write a function object to do this for you.
Christian Graus - C++ MVP
'Why don't we jump on a fad that hasn't already been widely discredited ?' - Dilbert
|
|
|
|
|
Hmmm.
What about extending CStringArray class ?
class CStringArrayEx: public CStringArray
{
public:
CStringArrayEx(CString*,size_t nSize);
};
#include <Afxtempl.h>
CStringArrayEx::CStringArrayEx(CString* pSrc,size_t nSize):CStringArray()
{
SetSize(nSize);
CopyElements(m_pData, pSrc,nSize);
}
This is quick suggestion. Hasn't put much thought in it.
You can use CStringArrayEx like below,
CString arrString[2]= { "1","2"};
CStringArrayEx objArray(arrString,2);
for (int i = 0; i <2 ;i++)
{
AfxMessageBox(objArray[i]);
}
|
|
|
|
|
Hello everyone,
I want to record the elapsed time for a specific function invocation. What is the most accurate way I should use on Windows platform? Which function call should I use?
regards,
George
|
|
|
|
|
If you want an accurate timer use the multimedia timers. Start the timer at the beginning of your program, add a "volatile int" somewhere and have the timer increase it on each callback. To time your function, check the value of this int before your function and subtract it from the value after your function.
|
|
|
|
|
Hello WalderMort,
What timer do you mean? I am a little confused. Do you mean a function or some tool? Could you show me a sample please?
regards,
George
|
|
|
|
|
Call GetTickCount() before and after function. (If you don't need too high accurancy)
rrrado
|
|
|
|
|
Thanks rrrado!
GetTickCount() could record milliseconds level elapsed time, which is good to me. I have seen that it uses some non-C/C++ standard data types, like DWORD. Do you know how to make such data type compatible in standard C/C++ program?
regards,
George
|
|
|
|
|
George_George wrote: I have seen that it uses some non-C/C++ standard data types, like DWORD.
What's non-standard about an unsigned long ?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Do you mean convert DWORD to unsigned long?
regards,
George
|
|
|
|
|
No, they are synonymous.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Thanks David, since long is not a C/C++ standard data type, I think to write a portable C/C++ application, we'd better use unsigned int to represent DWORD. Do you agree?
regards,
George
|
|
|
|
|
George_George wrote: ...since long is not a C/C++ standard data type...
Where did you get this from?
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Hi David, if I recall correctly, long is not a C89/C99 standard. But I am not sure, do you have any official information about it?
regards,
George
|
|
|
|
|
Long has been around since K&R's C back in 1978. It's been part of every C compiler I've used the past two decades.
"Approved Workmen Are Not Ashamed" - 2 Timothy 2:15
"Judge not by the eye but by the heart." - Native American Proverb
|
|
|
|
|
Thanks David!
regards,
George
|
|
|
|
|
Sounds a bit like profiling and the profiler uses QueryPerformanceCounter[^].
You have to use QueryPerformanceFrequency to know the resolution of the performance counter.
N.B. Use these functions for measuring time for debug purposes and optimization only!
If this is about a periodic operation to be done in the code, you should use the multimedia timers as WalderMort suggested.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
|
|
|
|
|
Thanks Roger!
QueryPerformanceCounter has a setback which not only measures the time elapsed (consumed) by current process -- but also the time consumed by the total running process at the same time in a system. Right?
What is a multimedia timer? Could you provide a link of MSDN please?
regards,
George
|
|
|
|
|
George_George wrote: QueryPerformanceCounter has a setback which not only measures the time elapsed (consumed) by current process -- but also the time consumed by the total running process at the same time in a system. Right?
Right! It's like getting a timestamp from the CPU.
Well, George, what do you really want to use it for?
Of course I can provide links to functions regarding the multimedia timers, but I'd like to make sure I suggest the best solution for your problem and in order to do that I need to know what you're trying to do.
Read about multimedia timers here[^].
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
|
|
|
|
|
Thanks Roger!
I have a simple application to do I/O test, and I want to draw some picture about the time consumed by each step of the application. Do you think QueryPerformanceCounter is enough?
regards,
George
|
|
|
|
|
George_George wrote: Do you think QueryPerformanceCounter is enough?
Yep, I would use the performance counter in this situation.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
|
|
|
|
|
Thanks Roger!
I have taken a look of multimedia timer. I think it could only provide callback approach in a regular interval. Is it correct? If it is, I think it does not apply to my requirement, do you agree?
regards,
George
|
|
|
|
|
George_George wrote: I think it could only provide callback approach in a regular interval. Is it correct?
Partly.
I think the most common way to use a multimedia timer is to let the timer set an event when it expires which unleashes a thread that is waiting on the event.
However, it still acts as a periodic timer.
George_George wrote: I think it does not apply to my requirement, do you agree?
I fully agree. Like i said, I would go for the performance counter in this situation.
Don't forget to add error checking in case the performance counter is unsupported and you also have to call QueryPerformanceFrequency in order to know the resolution of the performance counter. You'll find information about this if you follow the link I provided in my first post.
--
Roger
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
|
|
|
|
|
Man, how could a periodic timer be used to calculate the elapsed time? For example, I set the inverval of the timer to 10 seconds -- but how could I know the elapsed time of the function I am going to test will elapse exactly 10 seconds?
Roger Stoltz wrote: However, it still acts as a periodic timer.
regards,
George
|
|
|
|
|
George_George wrote: Man, how could a periodic timer be used to calculate the elapsed time?
You can, but it would be the wrong tool for the job.
Why are you asking? If you're referring to my first post I just wanted to cover the possibility that I'd misunderstood your question and make sure you don't think you can use the performance counter as a waitable timer.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote
|
|
|
|