|
swarup wrote: ...so does it enhance my application...
Highly doubtful, since all of the context switching would slow it down.
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
It really depends on what you are doing in the threads. Take your example, you have 100 log files to retrieve and process. Perhaps the time to retrieve a single log file would be about 0.5 seconds, then you do some processing, perhaps search a database, which may take anywhere between 0.1 and 10 seconds, then yes, using several threads would increase the speed. In this case, while one thread does a ten second search, another thread may complete 10 1 second searches.
But, if the time is pretty much standard for each log file, then as David Crow said, the constant switching between threads will take away any performance gain.
Waldermort
|
|
|
|
|
Hi
First of all I should say, I dont want to bother any one with my question or long program
please if you have time, help me.( I dont mean that I want any one to do my program, just please if you are an expert and professional in C++, please help me and guid me how to fix the program)
I did my best to comment my program.
I am learning C++ and now I'm working on a program that:
reads in a file "customers.txt" containing the information for bank customers. The file is formatted with each customer's name, arrival time (in minutes after 9:00), and service time (in minutes) on a separate line. The program moves each customer into the bank line at the arrival time. If the teller counter is available, the customer is moved out of the line to the teller. When the customer has spent the specified amount of time at the counter, they leave the bank and the next customer steps up. The program continues until all customers are serviced.
I'm trying to make Multiple Tellers, at this time my program assumes the bank has only one teller/counter. I want to modify the program so that it can handle multiple tellers, so that the customers in line will move to any available teller. For example, "Chewbacca steps up to counter #2" or "Vader has left counter #4."
but I have no idea how I can do that:
right now my program works, but I dont know how to add multiple tellers.
my program is:
Code: ( cpp )
/************************************************** **
** The main routine simulates a line-up at the bank.
************************************************** ***/
int main() {
//Read in the customer file.
//Assume file is in format: Name ArrivalTime ServiceTime
//Assume list is sorted based on distinct arrival times.
string file_name; // the files name that user input
ifstream fin;
cout<<"please Enter your choice:\nChoice1: (You can type in the name of your file.)\nchoice2: (You can ask the program to generate a list of random customers.)\n\n";
int choice;
cout<<"what is your choice? (1 or 2):";
cin>>choice;
while(choice!=1 && choice!=2){
cout<<"You should type 1 or 2, try again:\nEnter you choice again:";
cin>>choice;
}
Queue<Customer> customerList;
Customer newCustomer;
if(choice==1){ //choice 1 , user type his/her file_name to open
cout<<"PLease type your file name:";
cin >> file_name;
cout<<"\n";
fin.open( file_name.c_str( ) );
while (fin >> newCustomer)
customerList.enter(newCustomer);
fin.close();
if (customerList.isEmpty()) {
cout << "Could not read file customers.txt.\n";
return 0;
}
}
if (choice==2){
cout<<"Please specify the probability that a customer arrives each minute:";
int probability;
cin>>probability;
for (int i=0; i <= 540; i++) {
if ( 1+rand()%100 <= probability )
customerList.enter( Customer("A customer", i, 5+rand()%11) );
}
}
int num_teller; //number of tellers
cout<<"please Enter the Number of tellers:";
cin>>num_teller;
cout<<"\n";
//The first customer immediately steps up to the counter, no waiting.
//We start the clock running at first customer's arrival time.
Customer atCounter = customerList.leave();
bool isCounterEmpty = false;
int currentTime = atCounter.get_arrivalTime();
int startService = atCounter.get_arrivalTime();
printTime(currentTime);
cout << " " << atCounter.get_name() << " has entered the bank.\n";
printTime(currentTime);
cout << " " << atCounter.get_name() << " stepped up to the counter.\n";
//Set up our empty line.
Queue<Customer> line;
//Repeat while there are customers in bank or yet to arrive.
while (!customerList.isEmpty() || !line.isEmpty() || !isCounterEmpty) {
//Check if someone enters line.
if (!customerList.isEmpty() && (customerList.peek()).get_arrivalTime() <= currentTime) {
printTime(currentTime);
cout << " "<< (customerList.peek()).get_name()
<< " has entered the bank.\n";
line.enter( customerList.leave() );
}
//Check if someone leaves the counter.
if ( !isCounterEmpty && (startService + atCounter.get_serviceTime() <= currentTime) ) {
isCounterEmpty = true;
printTime(currentTime);
cout << " "
<< atCounter.get_name()
<< " has left the counter.\n";
}
//Check if counter is empty and someone is waiting in line.
if ( isCounterEmpty && !line.isEmpty() ) {
atCounter = line.leave();
startService = currentTime;
isCounterEmpty = false;
printTime(currentTime);
cout << " " << atCounter.get_name()
<< " has stepped up to the counter.\n";
}
currentTime++; //Inefficient. Better to move to next event time.
}
//Compute queue statistics.
return 0;
}
|
|
|
|
|
apejman wrote: I'm trying to make Multiple Tellers, at this time my program assumes the bank has only one teller/counter. I want to modify the program so that it can handle multiple tellers, so that the customers in line will move to any available teller. For example, "Chewbacca steps up to counter #2" or "Vader has left counter #4."
but I have no idea how I can do that:
right now my program works, but I dont know how to add multiple tellers.
I would create an object to represent the set of tellers. Your IsCounterEmpty variable would be replaced by AreAllCountersFull, and AreAllCountersEmpty propertys. When checking for a customer finishing service, you would either loop over the counters in your main function, or provide a member of the teller set that does the looping and removing. When adding a customer, you the teller set could provide a method that would assign a customer to the first available teller.
Nathan
|
|
|
|
|
hi,
i've got a regular dll project with mfc support. project has a dialog resource and a class for that dialog, say CMyDialog. an exported global function of the project shows the dialog by "DoModal"ing it when called.
the problem is, when i put an activex control on the dialog and bind it to a member object(which is an instance of the auto-generated class of that activex control) of CMyDialog, it doesn't show up.
i read the related msdn article(knowledge base Q231591: How To Use a Dialog Template to Create a MFC Dialog with an ActiveX Control) but couldn't figure out how to use it.
another thing which is strange but unrelated to problem above is that, if i don't leave the OnInitdialog function empty and put an afxmessagebox line, the dialog becomes modeless even if i DoModal it. it's not a problem and even something good for me. but i just wanted to know why.
any suggestions, solutions?
thanks.
|
|
|
|
|
The problem is that I used BCGPro and when docking two views together the parent wnd changed to a tabbed wnd which is introduced by BCGPro.
-----------------------------------------------------------------
I have a VC6 project which can be compiled and run.
After I copy the project to a new computer (CPU is AMD 4000+), it report runtime error, when using dynamic_cast (not each, some are right).
Is it the fault of the code?
How to solve it? Will using vs2005 help?
Thanks a lot.
PS: the cpu is already patched
modified on Thursday, February 21, 2008 10:21 PM
|
|
|
|
|
followait wrote: it report runtime error,
who/what is "it" ? the compiler ? the execution of the program ?
Are you using the same version of Visual Studio ?
Are any patch installed on one machine and not the other ?
Are the project settings the same ? have you enable/disabled the RTTI in the project?
...
|
|
|
|
|
"it" is the executive.
All is the same, except hardware.
|
|
|
|
|
most probably a coding error.
|
|
|
|
|
It is so simple, and according to my experience, it should be right.
I've no experience with a dual core cpu.
|
|
|
|
|
followait wrote: I've no experience with a dual core cpu.
I guess it has nothing related with dual-core.
How do you use that dynamic_cast ? Do you mind showing some code snippet?
Maxwell Chen
|
|
|
|
|
CWnd *pWnd=GetParent();
CMainFrame *pMF=dynamic_cast<cmainframe*>pWnd;
</cmainframe*>
And I'm sure, the parent windows is type of CMainFrame, typeid also not work.
The compiler option /GR is specified.
The key problem is that, it works in a single core cpu.
|
|
|
|
|
What is the result, when you make a console application (DOS-box) having RTTI and dynamic_cast with the single-core machine and execute the exe with the dual-core one?
Maxwell Chen
modified on Wednesday, February 20, 2008 12:09 AM
|
|
|
|
|
In this one, it has do dynamic_cast several times correctly, but encounter a runtime error at this one.
|
|
|
|
|
followait wrote: ...it report runtime error, when using dynamic_cast...
How are you verifying this?
"Normal is getting dressed in clothes that you buy for work and driving through traffic in a car that you are still paying for, in order to get to the job you need to pay for the clothes and the car and the house you leave vacant all day so you can afford to live in it." - Ellen Goodman
"To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne
|
|
|
|
|
Just run it in VC6 debug mode.
Not only dynamic_cast , typeid also has such a problem
|
|
|
|
|
A number of companies offer code signing certificates, for prices from $100-200. I'm wondering if some are better than others, or perhaps the tools some provide make them worth the extra expense.
Anyone have any thoughts on who is the best to go with?
Patrick
|
|
|
|
|
I doubt anyone has a "best of" list... We use a VeriSign code signing certificate, and are happy with it. It works.
I am not sure what else can be said about it.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />
Peter Weyzen<br />
Staff Engineer<br />
<a href="http://www.soonr.com">SoonR Inc -- PC Power delivered to your phone</a>
|
|
|
|
|
Whichever authority is recognized automagically by the browser/OS is best.
Otherwise, you may as well make your own certs (which works fine too).
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
we just got one from Comodo, this weekend. the process was pretty easy (after a couple of rounds of verification).
they didn't provide any tools, since the things you need (basically just SIGNTOOL.EXE) are all part of MS's SDKs.
|
|
|
|
|
FWIW - I second Comodo. I have a CS cert from them as well and am very happy with it.
Peace!
-=- James Please rate this message - let me know if I helped or not!<hr></hr> If you think it costs a lot to do it right, just wait until you find out how much it costs to do it wrong! Remember that Professional Driver on Closed Course does not mean your Dumb Ass on a Public Road! See DeleteFXPFiles
|
|
|
|
|
Hi,
I'm presently coding a driver for Windows XP and I'm having an issue: how to detect the keyboard layout?
Actually I need to detect if my driver is running on a computer with an azerty or qwerty keyboard. The best would be to be able to detect the keyboard layout for the current process. I know the GetKeyboardLayoutName API, but I have no idea what would be the equivalent in kernel mode if there is one...
Does someone know how to do that?
Regards
|
|
|
|
|
i never used, a little search on msdn gives,
Manthis wrote: The best would be to be able to detect the keyboard layout for the current process.
HKL GetKeyboardLayout( DWORD idThread
); per thread, its more granular than current process.
Manthis wrote: I have no idea what would be the equivalent in kernel mode
and in wince it has corresponding MDD driver function
typedef HKL (*PFN_LAYOUT_MGR_GET_KEYBOARD_LAYOUT)(
DWORD idThread
);
i think there should be something similar in windows also
modified on Tuesday, February 19, 2008 11:28 PM
|
|
|
|
|
Well I knew these two functions but I'm pretty new to driver developpement, and I'm can't find their equivalent for windows kernel developpement.
I might I've found a hint with this request: IOCTL_KEYBOARD_QUERY_ATTRIBUTES, but I'm really not sure.
Can someone confirm?
|
|
|
|
|