|
Thanks for explaining with patience. Have a nice day. Bye.
ReEgards,
LG
lgatcodeproject
|
|
|
|
|
You are most welcome. You too have a nice day.
-Saurabh
|
|
|
|
|
Hi,
I've got problem with MFC. I tried to run the query like this, and I am using recordset
select count(*) from dbo.Vehicle
and how to grab the value of the count(*)?
I found one way, but its running very slow by using loop
int inc = 0;
query = select * from dbo.vehicle
while(records is not eof or record is bof)
{
inc++;
records.movenext()
}
printf("Total count is %d",inc);
do you have any idea how to grab the value using the count(*) instead of running the loop
Thanks
Arif
|
|
|
|
|
Hi,
I'm coding a small fragment which gets called when the system fails to secure a resource on the local network. (it is to replace a Retrycancel Message, with a Dialog box on a different thread, telling that the system is busy, offering a 'Cancel button. The further idea is, that when the resource becomes available, the box disappears, and normal porocess follows. The entire Project is Dialog based.
The Escence of the code is as follows:-
<br />
int ProcDlg::Do(){<br />
if(!m_bIsRunning){ <br />
AfxBeginThread(ThreadProc,this);<br />
m_bIsRunning=TRUE;<br />
return IDOK;<br />
}<br />
else if(m_bDoCancel){<br />
return EndDialog(IDCANCEL);<br />
}<br />
<br />
else return IDOK;<br />
}<br />
<br />
void WaitDlg::OnCancel(){<br />
...<br />
m_pInfo->m_bDoCancel=TRUE;<br />
}<br />
<br />
UINT ThreadProc(void* pParam){<br />
WaitDlg dlg;<br />
dlg.m_pInfo=(ProcDlg*)pParam;<br />
dlg.DoModal();<br />
return 0;<br />
}<br />
The General Idea is, that the Wait Dialog sets a Flag in the Process Dialog, which, when stumbled upon, will do the cleanup.
To make the code readable, and to get to the nubb of the problem, I left out a lot of supporting code, including Synchronisation objects.
The thread that runs the Notification Dialog, gets locked up!
It locks the thread in:
<br />
if (hWndParent != NULL && ::IsWindowEnabled(hWndParent))<br />
{<br />
::EnableWindow(hWndParent, FALSE);<br />
bEnableParent = TRUE;<br />
}<br />
in particular in ::EnableWindow.
Traceing into that in the Disassembly Window lands at an opcode 0x0F, where it stops.
What's going on here!
Bram van Kampen
|
|
|
|
|
Two things I see right away -
1) You're creating a worker thread when you need a UI thread.
2) How are you going to close the WaitDlg if it's in a modal loop?
What about using a modeless wait dialog created on the main UI thread?
The code that locks up - where is that, on what thread is it executing, and
what is hWndParent?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Mark Salsbery wrote: 1) You're creating a worker thread when you need a UI thread.
The Thread starts off as a worker thread, but calls it's own WinProc as part of calling the second Dlg.DoModal(). Tried this by calling a UI thread, Same result.
Mark Salsbery wrote: 2) How are you going to close the WaitDlg if it's in a modal loop?
By Setting a Flag, and, by calling EndDialog(...) for the Dlg when the next itteration of the (Not Shown) Outer loop calls the appropriate routine.
Mark Salsbery wrote: The code that locks up - where is that, on what thread is it executing, and
what is hWndParent?
The locking Code is on the Second thread, trying to run WaitDlg.DoModal()
HISTORY
Opening Files on a network, fails if already open on other app.(Data Collision) The canonical access routine contains an endless loop which tries to open, sleeps for 100 msec, and tries again. (does so with multiple filesin a predetermined order) After 50 such tries on a single File, it gives a RetryCancel MsgBox. All obvious reasons for failure have at this stage been dealt with, we're dealing with the default.Experience shows that 'Retry' will solve it. I now want to replace the box with a Dialog: System is busy, with a cancel button, and which automatically returns 'IDRETRY' after say 500 msec.
Thanks,
Bram van Kampen
|
|
|
|
|
Are you giving the second-thread dialog a parent? That can cause problems in MFC
if the parent and child were created on different threads.
Regardless, what you're doing is so much simpler using a modeless dialog on the UI thread.
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Mark Salsbery wrote: Are you giving the second-thread dialog a parent? That can cause problems in MFC
if the parent and child were created on different threads.
Actually, No. Going to try that now. Q. In general, does the existence of a Parent CWnd Class suffice, or do we need to create the underlying window
(albeit Invisible)
Mark Salsbery wrote: Regardless, what you're doing is so much simpler using a modeless dialog on the UI thread.
Any chance of a brief outline of how to do that?
Thanks,
Bram.
Bram van Kampen
|
|
|
|
|
Bram van Kampen wrote: does the existence of a Parent CWnd Class suffice, or do we need to create the underlying window (albeit Invisible)
You don't need a parent....I was only commenting that it would
cause problems if the parent was created on a different thread than the
child.
Bram van Kampen wrote: Any chance of a brief outline of how to do that?
From the main UI thread, create the CDialog object. Use Create()
instead of DoModal() to create the window (HWND).
Communication with the window can be done using window messages,
which can be posted from any thread.
That's definitely the safest way to use MFC windows.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Thanks Mark,
The Time delay is because I'm dealing with many issues.
Mark Salsbery wrote: From the main UI thread, create the CDialog object. Use Create()
instead of DoModal() to create the window (HWND).
Communication with the window can be done using window messages,
which can be posted from any thread.
Well, I Bypassed experience in SDK programming. When I wrote programs in DOS, the perceived wisdom was that Windows would NEVER catch on. When I bought my compiler, MFC came free with it, and I eventually learned how to mould it to my needs by writing Dialog based Apps.
I understand how the WNDPROC is called from the Kernel, I also understand how the MessageMap is implemented;
How do I stitch the lot together.
Regards
Bram van Kampen
|
|
|
|
|
I'm completely lost, I have been given an assignment and hit a roadblock this is the assignment:
a.) Create a function called howMany that will search a two dimensional array for the the number of occurences a particular number is found within the array. Your function should return the number of occurences the number appears within the array and the cooridnates that each one is found.
Your function at the very least should take as arguments the number to search for, and the two dimensional array. You are going to need some mechanisim to return the coordinates. You could use a string, an array, or a 2D array here but I will leave that up to you. This means your function needs at least 3 arguments!
b.) Create another function that will take as arguments integer values that represent row, column coordinates. return the value at that location
c.) Write a function that will fill the array with random numbers from 1 - 10. Initially, your array should be 10 rows by 9 columns
Finally write some kind of driver to demostrate the functionality of your program. It would be nice if you used some kind of a loop and a simple menu scheme.
I also have no clue how to write a driver, my book has virtually no information on it and all the sites I have gone to in order to figure it out have offered a program that will act as one. If someone could post a program, I would appreciate the reference otherwise an explanation would be nice. Thank you.
|
|
|
|
|
Well driver is just a program. Its purpose is to show the capability of the code. You can think of it as front end to the logic of the program.
For example, lets say the main logic of the program is to compute sum of two numbers. Then you will do something like this.
void sum(int a, int b)
{
int c = a + b;
return c;
}
void main()
{
int a, b;
printf("Enter first number: %d", &a);
printf("Enter second number: %d", &b);
int c = sum(a, b);
printf("Sum of two numbers is: %d\n", c);
}
-Saurabh
|
|
|
|
|
livin lie wrote: I also have no clue how to write a driver...
A device driver?
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
A test driver, they are used to test each function and simplify the search for errors and warnings. Though I do not see the point in that part of my assignment, Debug informs the user of exactly where the problem can be located and the use of breakers is alot quicker.
|
|
|
|
|
Anyone point me to a good tutorial for Object Array List with Serialization?
Many thanks
AF Pilot
|
|
|
|
|
http://www.tenouk.com/visualcplusmfc/visualcplusmfc10b.html[^]
One of the easiest ways to use a CObList object is to add new elements to the tail, or bottom, of the list and to remove elements from the head, or top, of the list. The first element added to the list will always be the first element removed from the head of the list. Suppose you're working with element objects of class CAction, which is your own custom class derived from CObject. A command-line program that puts five elements into a list and then retrieves them in the same sequence is shown here:
#include <afx.h>
#include <afxcoll.h>
class CAction : public CObject
{
private:
int m_nTime;
public:
// Constructor stores integer time value
CAction(int nTime) { m_nTime = nTime; }
void PrintTime() { TRACE("time = %d\n", m_nTime); }
};
int main()
{
CAction* pAction;
// action list constructed on stack
CObList actionList;
int i;
// inserts action objects in sequence {0, 1, 2, 3, 4}
for (i = 0; i < 5; i++)
{
pAction = new CAction(i);
// no cast necessary for pAction
actionList.AddTail(pAction);
}
// retrieves and removes action objects
// in sequence {0, 1, 2, 3, 4}
while (!actionList.IsEmpty())
{
// cast required for return value
pAction = (CAction*) actionList.RemoveHead();
pAction->PrintTime();
delete pAction;
}
return 0;
}
Here's what's going on in the program. First a CObList object, actionList, is constructed. Then the CObList::AddTail member function inserts pointers to newly constructed CAction objects. No casting is necessary for pAction because AddTail() takes a CObject pointer parameter and pAction is a pointer to a derived class. Next the CAction object pointers are removed from the list of the objects deleted. A cast is necessary for the returned value of RemoveHead() because RemoveHead() returns a CObject pointer that is higher in the class hierarchy than CAction. When you remove an object pointer from a collection, the object is not automatically deleted. The delete statement is necessary for deleting the CAction objects.
There is sufficient light for those who desire to see, and there is sufficient darkness for those of a contrary disposition.
Blaise Pascal
|
|
|
|
|
Thanks very much for your assistance!
AF Pilot
|
|
|
|
|
Hi, I'm new to this forum. I'm taking C++ programming in school and it is very difficult for me. My homework is to create a c++ program that implements functions to display the following data. I dont know whats wrong or how to fix it please help.
I don't even know if I wrote the code properly. Any help is appreciated
#include <iostream>
#include <process.h>
#include "stdafx.h"
using namespace std;
/***************************************************************************/
// FUNTIONS
/***************************************************************************/
void Greeting();
void My_personal_info();
void My_favorite_movie();
void My_favorite_move();
void My_favorite_trip();
void My_favorite_book();
void My_favorite_sports();
void pause();
void clrscr();
//MAIN
int _tmain(int argc, _TCHAR* argv[])
{
// greeting the user
Greeting();
pause();
clrscr();
My_personal_info();
pause();
clrscr();
My_favorite_movie();
pause();
clrscr();
My_favorite_trip();
pause();
clrscr();
My_favorite_book();
pause();
clrscr();
My_favorite_sports();
pause();
clrscr();
return 0;
}
void Greeting()
{
cout << "Welcome to my program!!" << endl;
return;
}
void My_personal_info()
{
cout << "First Name: Jon" << endl;
cout << "Last Name: Berry" << endl;
cout << "Age: 17" << endl;
return;
}
void My_favorite_movie()
{
cout << "Movie Title: " << endl;
cout << "Movie Rating: " << endl;
cout << "Year Released: " << endl;
return;
}
void My_favorite_trip
{
cout << "City and County: " << endl;
cout << "Persons Traveled With: " << endl;
cout << "Year Traveled: " << endl;
return;
}
void My_favorite_book
{
cout << "Book Title: " << endl;
cout << "Book Author: " << endl;
cout << "Book Type: " << endl;
return;
}
void My_favorite_sports
{
cout << "Name of Sports: " << endl;
cout << "To Watch or To Play: " << endl;
return;
}
void pause()
{
char dummy;
cout << endl << "Press Enter to Continue. . ."
cin.get(dummy);
return;
}
void clrscr()
{
system("cls");
return;
}
|
|
|
|
|
Aside from a few syntax errors, and it not really being a C++ program, what's the problem?
"Love people and use things, not love things and use people." - Unknown
"The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch
|
|
|
|
|
Actually, technically, it is a C++ program.
If the Lord God Almighty had consulted me before embarking upon the Creation, I would have recommended something simpler.
-- Alfonso the Wise, 13th Century King of Castile.
This is going on my arrogant assumptions. You may have a superb reason why I'm completely wrong.
-- Iain Clarke
[My articles]
|
|
|
|
|
OverdoS wrote: I don't even know if I wrote the code properly. Any help is appreciated
Did your school fail to supply you with proper learning materials, like books and such? Did your school just give you a computer and an internet connection and tell you to figure out the rest by posting questions on internet forums? What is the name of your school?
led mike
|
|
|
|
|
I have an application with an About Dialog Box. The dialog displays an image, and when you click part of the image, a browser opens that takes you to a website. So far, so good. But what I'm finding is that if I close the browser immediately after it opens, it locks up for a few seconds with a blank, white screen. Eventually the browser closes. If I wait, say, ten seconds or so after the browser opens to close it, it will close immediately with no problems..
Here's my code for opening the browser:
::ShellExecute(NULL, "open", "http://www.lesliesanford.com", NULL, NULL, SW_SHOWNORMAL);
Nothing really special there. Any thoughts or clues?
EDIT: Interesting. I just noticed that this problem occurs when I open IE outside of my application. This seems to be a problem that's independent of my app, i.e. my app's not causing it.
|
|
|
|
|
yeah! it puzzled me first, because the same thing has been done by a dozen times by me, nothing went wrong then.
so please update if you find a solution of that ( even if its nothing to do with your app )
Never Work Hard! - Work Smart!!!
www.indianITforum.com
|
|
|
|
|
Seen this problem many a time. Nothing to do with your Programming skills, apart from, why did you call this Browser App in the first place.
This has to do with different threads having to do many things on a finite computer. Calling a Website is 'Expensive'. It typically involves downloading scripts, which gives you the next script title to download.
These things take time to do, and things to dismantle!
This won't be sorted untill we have:
-1500 GB Drives as Standard
-1500 MB Memory as Standard
-1500 MB/S Network Connections
-At the Same time, Everyody in Microsoft thinks that we are working with 10GB drives and 10GB Memory.and 1GB Connections.
Bram van Kampen
|
|
|
|
|
I'm working with a project with fairly large codebase. so i'm looking for some tools, which can function the following task
- Code profiling
- Code formatting
- Dead code detection
- Clone Detection
Do you know any products which helps to do all of these?, or more than that? i don't mind to purchase it even if it costs up to $15,000/-
Never Work Hard! - Work Smart!!!
www.indianITforum.com
|
|
|
|
|