|
no,the style is still center vetical and border,border and sunken are different ,you can try to compare their effect,you only feel it look like sunken .
|
|
|
|
|
How can I consume a managed dll such as a dll that created by C# in unmanaged code like a MFC project?
|
|
|
|
|
|
I have matrixes having great array size.
i.e. float A[1000][1000][10];
Is it possible to open such a great matrix and how? Also, I would be pleased to know the maximum possible array size in C++ Builder. Thanks in advance to those who help?
|
|
|
|
|
Is it possible? Try it
The max possible size depends not on the compiler but on your stack size settings.
If it is not possible to create an array like this on the stack you can create it on ther heap. That should work...
Jens
|
|
|
|
|
Thanks Jen for the prompt reply.
However, if you could write a command line to open this size matrix on heap that would solve my problem completely. Looking forward to hearing from you.
Thanks.
|
|
|
|
|
Solution 1:
float *pfA = new float[ 1000 * 1000 * 10];
Solution 2:
typedef float floatArray[ 1000 ][ 1000 ];
floatArray *pfloatArray = new floatArray[ 10];
Solution 3:
typedef float ThausendArray[ 1000 ];
typedef ThausendArray Alot[ 1000 ];
Alot *pfA1 = new Alot[ 10 ];
Jens
|
|
|
|
|
Thanks a lot Jens
|
|
|
|
|
zaferaslan wrote:
i.e. float A[1000][1000][10];
That's 10 million float s on the stack. Unless you increase the default size of the stack from 1MB, it will not work. Use the heap instead.
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
Thanks David.
As I understand, I should use pointer type variable as Jens kindly proposed;
float *p= new float [1000*1000*100];
and also,
typedef float ThausendArray[ 1000 ];
typedef ThausendArray Alot[ 1000 ];
Alot *pfA1 = new Alot[ 10 ];
However, is there any other way? I need the variable in three dimensional array form and this approach generally causes lose of data during long executions.
|
|
|
|
|
zaferaslan wrote:
As I understand, I should use pointer type variable as Jens kindly proposed;
float *p= new float [1000*1000*100];
Yes, that's the ticket. The problem here is that it requires you to convert the three indices by proper scaling, e.g., to access the i, j, k element of the array, the subscript is
i + j * 1000 + k * 1000 * 100 or some variant on the above. You can't access it as pArray[i][j][k] .
zaferaslan wrote:
However, is there any other way?
Yes. Try:
int * * * p = new int**[FirstDimension];
for(int i = 0; i < FirstDimension; i++)
{
p[i] = new int *[SecondDimension];
for(int j = 0; j < SecondDimension; j++)
{
p[i][j] = new int[ThirdDimension];
for(int k = 0; k < ThirdDimension; k++)
p[i][j][k] = 0;
}
} zaferaslan wrote:
I need the variable in three dimensional array form and this approach generally causes lose of data during long executions.
You shouldn't be losing data. If so, something else is wrong.
"The pointy end goes in the other man." - Antonio Banderas (Zorro, 1998)
|
|
|
|
|
Thank you very much David.
|
|
|
|
|
Why don't you use a vector instead?
<br />
std::vector< std::vector< std::vector< float > > > FloatMatrix;<br />
This way, you can avoid memmory allocation/deallocation and their associated problems and pitfalls...
A student knows little about a lot.
A professor knows a lot about little.
I know everything about nothing.
|
|
|
|
|
Thanks Bob. As I understand, FloatMatrix is defined as a 3-D vector here. Further, how can I add dimension sizes? And, therafter, could I be able to input data into the vector by classical functions such that scanf(), fscanf(), cin>>? Thanks in advance.
|
|
|
|
|
Hi,
Since vector is dynamic, you don't need to specify dimension sizes. If you need to reserve space you can use the function vector::reserve(). I don't know how you can specify the maximum size.
When you want to add values to the vectors through scanf and similar functions you can do it like this:
<br />
float f = 0.0;
<br />
scanf("%f", &f);
<br />
FloatMatrix[x][y].push(f);<br />
for reading from the vector:
<br />
float f = FloatMatrix[x][y][z];
if you look in MSDN for information on vector, you'll find more usefull information.
Good luck.
|
|
|
|
|
I will try it. Thanks a lot.
|
|
|
|
|
how to use CCryptMD5Hash??
|
|
|
|
|
|
I am receiving between 40 and 50 bytes from a some asynchronous serial equipment at 9600 baud. I am suppose to receive this data within 50 milliseconds after it being sent. When I compare the two timestamps it is more than 80 milliseconds.
I am currently using a thread to read the data and do the timestamp immediately.
Any ideas how one could configure the COMMTIMEOUTS optimally to reduce the delay.
Maybe I need to look at something else in my program. Any ideas.
Thanks
Cheers
|
|
|
|
|
Timers under windows and external hardware aren't things that play particularly nicely from my experience. Some fairly obvious suggestions are:
Make sure that you are using a high resolution timer QueryPerformanceCounter() rather than timeGetTime(). timeGetTime() only has a resolution of 10ms, but it can be even worse than that in some situations.
If you are sleeping in you polling thread, don't expect to wake up on time if you call Sleep(), delays can be out by huge ammount from a hardware perspective - 200ms for a sleep of 10ms is quite likely.
If you aren't sleeping, check to make sure that the CPU isn't being choked by your polling thread or another thread being a hog. It might not cause problems now, but it may down the track.
Solutions depend on the application - how time critical is time critical? Is it better to lose data and stay on time? Or do you always need to get every byte? One of the projects I'm working on at the moment is using MaRTE[^] a real time embedded operating system. In the past we have designed custom hardware to cache data to ensure that the PC always keeps up. It's a case of requirement specifications dictatating software design very tightly
If you can keep you head when all about you
Are losing theirs and blaming it on you;
If you can dream - and not make dreams your master;
If you can think - and not make thoughts you aim;
Yours is the Earth and everything that's in it.
Rudyard Kipling
|
|
|
|
|
Thanks for your input. It is appreciated.
I do use a QueryPerformance counter to check the time.
Timing and the data is critical.
Other instruments that sends synchronous data at 19200 baud are received at less than 50ms. Unfortunately the instrument in question is the only one that sends asynchronous data at 9600 baud.
I will check out the threads in the mean time.
Thanks again
|
|
|
|
|
Hi all,
How can I detect in runtime whether the AGP slot is empty or not?
|
|
|
|
|
Hi,
When you run this tool handle.exe from http://www.sysinternals.com/ntw2k/freeware/handle.shtml
you will see the names of the MMF sections, for eg:
\BaseNamedObjects\C:_Documents and Settings_test_Local Settings_History_History.IE5_MSHist012004050420040505_index.dat_49152
1. I want to know how handle.exe gets this name from? Is is available from some standard API or its just the path name with '\' replaced with '_'? Its unlikely, as what is 49152 about?
2. I could open this MMF section with OpenFileMapping and could walk through using the memory address. Is there a way to obtain the size of this MMF section? We dont know the file name for this section so that I can use GetFileSize.
3. Any good articles that discusses MMF?
Thanks
-fl
|
|
|
|
|
|
when i run my program via VC++ (by pressing F5) a specified function (OnSize) is called while when i run it outside of VC++ it isn't!!!
i checked it by writing something in a file.
please give a technical answer, i've examined all ordinary cases.
|
|
|
|