|
I have a windows cluster with 2 servers running Windows Server 2003. Initially, my client-server application was crashing so I was fixing bugs with my code. Now, periodically one the two cluster servers will just restart itself (it's like a hard system crash to where the server just reboots).
The only thing I've noticed that looks a bit odd is that the memory that SQL Server 2000 (Enterprise Edition) uses climbs rapidly until it reaches about half the server's physical memory (~1.5 GB). According to the guy that setup the cluster, this is normal. I think that when a cluster server crashes, it is the one that is currently running the SQL Server.
My application uses ADO (VC++ 6.0) to access data in SQL Server (which is cluster aware). I've setup a program to simulate alot of network traffic (which means alot of database access; opening and closing connections the database constantly). When this stress test is run is when I notice SQL Server's memory climb constantly.
The server crash (restart) is random; think it has happened even without the stresss test going.
I'm desparate for any ideas or thoughts on this matter. Anyone ever experience something simular (i.e. a clustered server restarting itself)?
|
|
|
|
|
I have been having trouble with this program lately and could use a little help.
The program deals with drawing a diamond with a width specified by the user. So that, the widest part of the diamond is 13 *'s long. The diamond is supposed to be drawn with *'s. If anyone can add any input, feel free. Thanks.
|
|
|
|
|
int size,x,y,temp;
size=13;<br />
y=1;<br />
x=size/2;
for(i=0;i<=size-1;i+=2)<br />
{<br />
temp=x;<br />
for(j=0;j<=i;j++)<br />
{<br />
draw at x,y<br />
x++; <br />
}<br />
x=temp--;<br />
y++;<br />
}
I haven't tried the code yet.
<italic>Work hard, Work effectively and a bit of luck is the key to success.
|
|
|
|
|
|
This is the code i have so far:
for(int i=0;i<=width;i+=2)
{
cout<<"\n";
for(int j1=0;j1<=(tempwidth/2)-1;j1++)
cout<<" ";
for(int j2=0;j2<=i;j2++)
cout<<"*";
tempwidth--;
}
For an example i am using a width of 13. Through each line of the triangle the amount of spaces before and after the asterisk's are 1 less than the line before it. So by taking the width and dividing it by 2, that chops off the decimal and subtracts one which gives me the right amount of spaces. In my head this code makes sense. But, I am obviously missing something and I just can't seem to figure out what else is needed. Any advice is appreciated.
|
|
|
|
|
Hi...
I'm trying to make a progress bar of this type: http://www.airwebreathe.org.uk/progress.png[^]. The type you get when you start a process of some kind which will take an unknown amount of time. To show activitty the progress bar just swooshes. Does anyone know how to get the CProgressCtrl to do this snake motion?
Joel Holdsworth
Wanna give me a job this summer?
Check out my online CV and project history[^]
|
|
|
|
|
How about something like this[^]
Steve
|
|
|
|
|
Yes that would probably do it, but I was wondering if Microsoft had some undocumented way of getting the standard control to do the job. Thus ensuring that the control always looks correct in future versions of windows, and that I don't incur added mass to my exe.
Joel Holdsworth
Wanna give me a job this summer?
Check out my online CV and project history[^]
|
|
|
|
|
Joel Holdsworth wrote:
I'm trying to make a progress bar of this type: http://www.airwebreathe.org.uk/progress.png[^]. The type you get when you start a process of some kind which will take an unknown amount of time.
This can be achieved by setting the correct style (PBS_MARQUEE) when creating the ProgressCtrl. The documentaition says:
PBS_MARQUEE
Version 6.0 or later. The progress bar moves like a marquee.
Greetings, Ralph
Wanna give me a job this summer?
Well ... if you'd better read the docu ...
|
|
|
|
|
Ralph Wetzel wrote:
Well ... if you'd better read the docu ...
ok ok... fair play. My copy of MSDN is out out of date. I should have looked online I guess.
Thanks for your help anyway.
Joel Holdsworth
Wanna give me a job this summer?
Check out my online CV and project history[^]
|
|
|
|
|
Note that you'll need v6 of Comctl32.dll and Shell32.dll for this style to work.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
|
|
|
|
|
Why does the following print out 2 twice (instead of 1, 2)?
#include <stdio.h>
template < int i >
void foo()
{
printf("%i\n", i);
}
int main(int argc, char* argv[])
{
foo<1>();
foo<2>();
return 0;
}
- thanks
|
|
|
|
|
This is a well known bug in VC++ 6.0: the compiler is blind to template parameters that do not somehow appear as actual arguments of a template function. Hence, foo<1> and foo<2> are treated as the same instantiation.
The following workaround can be applied:
template<int i>
struct int_type
{
};
template<int i>
void foo(int_type<i>* dummy=0)
{
printf("%i\n", i);
}
int main(int argc, char* argv[])
{
foo<1>();
foo<2>();
return 0;
} the dummy argument pulls the i template parameter into the list of arguments of foo , so circumventing the compiler bug. Moreover, as dummy has a default value, you don't need to explicitly mention it when calling foo . Sneaky, isn't it?
Joaquín M López Muñoz
Telefónica, Investigación y Desarrollo
Want a Boost forum in Code Project? Vote here[^]!
|
|
|
|
|
Joaquín M López Muñoz wrote:
This is a well known bug in VC++ 6.0
grrr... ok, thanks!
|
|
|
|
|
I should know how to do this but I keep on coming up with compile errors. I want to create a dynamic-length array of pointers to a custom class I made. I tried using the following malloc commands:
CClass * list[] = (CClass *) malloc(sizeof(CClass) * AmountOfPointers);
The compile error tells me I can't equate a pointer to an array of pointers. Should I be using reinterpret_cast to do this? I tried changing the cast from (CClass *) malloc... to (CClass *[]) malloc... but I got another error, cannot recast a pointer to void to an array of CClass pointers. I tried looking for help on the site but I couldn't find into on dynamically-sized arrays of pointers. Elsewhere in my program I have an array of pointers to something else but that array length is static.
|
|
|
|
|
You shouldn't use malloc to allocate an array of objects, because malloc does not call the constructors for each object. Here's how I would do this:
CClass *list[] = new CClass *[AmountOfPointers];
for (int i = 0; i < AmountOfPointers; i++) {
list[i] = new CClass;
} Note that, when you are done with the list and want to deallocate it, the code will look something like this:
for (int i = 0; i < AmountOfPointers; i++) {
delete list[i];
}
delete []list;
Software Zen: delete this;
|
|
|
|
|
I got an error with the first line of your code, it couldn't cast CClass ** to CClass *[], so I just changed the line to:
CClass **list = new CClass *[AmountOfPointers];
and left the rest alone and I think it works fine, thanks.
|
|
|
|
|
I used your method (although a malloc line did the same thing) to create the array of pointers. After this code is run, I run the same class member function in each instance of the class. I get no compile errors, but I have a piece of code within a member of the class I am creating the array of pointers to. My program crashes when it runs my code after your statements. However, if I eliminate the loop and create each new class manually, the code doesn't crash. In both instances, the trace runs to the first class and finds the member function but an array in the member function crashes when using the first piece of code. The function executes fine with the second set of statements.
This doesn't work:
CClass **list = new CClass *[AmountOfPointers];<br />
for (idnum = 0; idnum < AmountOfPointers; idnum++) { list[idnum] = new CClass(idnum); }
However, this code does work:
CClass **list = new CClass *[AmountOfPointers];<br />
list[0] = new CClass(0);<br />
list[1] = new CClass(1);<br />
list[2] = new CClass(2);<br />
... etc ...
I don't get why it's crashing because of a difference between a loop and a set of manual statements.
|
|
|
|
|
The code below is a similar method, but a little more efficient, since it only calls new twice, and it only calls delete twice.
It calls new once to create the array of pointers, and then it calls new a second time to create a single block array of the target type.
The the for loop assigns different sections of the block of array to each pointer in the pointer array.
<br />
template < typename T ><br />
T **Allocate2DArray( int nRows, int nCols)<br />
{<br />
T **ppi;<br />
T *pool;<br />
T *curPtr;<br />
<br />
ppi = new T*[nRows];<br />
<br />
pool = new T [nRows * nCols];<br />
<br />
curPtr = pool;<br />
for( int i = 0; i < nRows; i++)<br />
{<br />
*(ppi + i) = curPtr;<br />
curPtr += nCols;<br />
}<br />
return ppi;<br />
}<br />
<br />
template < typename T ><br />
void Free2DArray(T** Array)<br />
{<br />
delete [] *Array;<br />
delete [] Array;<br />
}<br />
<br />
int main()<br />
{<br />
double **d = Allocate2DArray<double>(10000, 10000);<br />
d[0][0] = 10.0;<br />
d[1][1] = 20.0;<br />
d[9999][9999] = 2345.09;<br />
Free2DArray(d);<br />
}<br />
Top ten member of C++ Expert Exchange.
http://www.experts-exchange.com/Cplusplus
|
|
|
|
|
I found a page on here and interpreted the help into my program and came up with this. Tell me if this is okay...
CClass ** list = (CClass **) malloc(sizeof(CClass) * AmountOfPointers);
|
|
|
|
|
That still doesn't work. A single malloc allocates a single block of memory. The fact that you are casting the pointers to the right type doesn't change that fact.
What you are asking for is this:
list[]:
+-----+ +-----------+
| [0] |-->| CClass[0] |
+-----+ +-----------+
| [1] |-->| CClass[1] |
+-----+ +-----------+
| [2] |-->| CClass[2] |
+-----+ +-----------+
| [.] |-->| CClass[.] |
+-----+ +-----------+ The code you are using is creating this:
+-----------+
-->| CClass[0] |
+-----------+
| CClass[1] |
+-----------+
| CClass[2] |
+-----------+
| CClass[.] |
+-----------+ Now, if all you really need is an array of CClass objects, the following will work:
CClass *list = (CClass *)malloc(sizeof(CClass) * AmountOfObjects); although, as I mentioned in my earlier message, this isn't a good idea since it doesn't call the CClass constructors.
Software Zen: delete this;
|
|
|
|
|
Two problems:
An array of CClass* is typed as CClass** (note two asterisks).
You can't use the unsized array notation, you can only use that if you have an array initializer.
The correct code is:
CClass** lst = (CClass**) malloc ( sizeof(CClass*) * AmountOfPointers );
--Mike--
LINKS~! Ericahist | 1ClickPicGrabber | CP SearchBar v2.0.2 | C++ Forum FAQ
Strange things are afoot at the U+004B U+20DD
|
|
|
|
|
Hi all,
I got a AES impelmentation code in VC++ and have some doubts, which I cannot sort out.
Will you plssssssssss let me know if u are familiar with both the AES algorithm and VC++.
So that I can forward my doubts along with the programme.
Thx...
Vendy
|
|
|
|
|
|
hi,,
oh ok.
There is an implementation of the AES algorithm in the below link. If u download it..
http://www.thecodeproject.com/cpp/aes.asp
in Table.h
(1.) Why have they used s boxes in ‘int’s? why not
const int CRijndael::SBox[256] rather than ---const char CRijndael::SBox[256] and replace the negative values with positive?
(2.) What does
const int CRijndael::sm_T1[256] …. const int CRijndael::sm_T8[256] tables correspond to?
(3.) and const int CRijndael::sm_U1[256]…const int CRijndael::sm_U4[256] tables correspond to
(4.) also const int CRijndael::sm_shifts[3][4][2] tables correspond to?
tnx
|
|
|
|