|
Do you really want to go multiprocess? I mean, you may take advantage from multi-core CPUs simply going multithread, avoiding IPC overhead.
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.
[my articles]
|
|
|
|
|
Yes. but in single processor mode multithreding is not always achieve any good performance gain. So I want to take real advantage of MC systems.
|
|
|
|
|
Concurrent process architectures are less hazardous (at least IMHO) the single-process-multithreaded ones, but you have to resort to some IPC mecchanism.
Again, typing IPC inside the CP search engine makes the miracle happen.
http://www.codeproject.com/info/search.aspx?artkw=IPC&sbo=kw[^]
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.
[my articles]
|
|
|
|
|
vikrams wrote: but in single processor mode multithreding is not always achieve any good performance gain.
Very true. It usually results in the opposite.
"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
|
|
|
|
|
Hi all,
I have few classes which are used in three different levels of my project. I can't refer higher level classes just including header files. So what I have done is used a pointer variable(called as control agent) in upper level and with inline member function to access different classes in any level.
I've done it. But when I compile it I got an error message. Here it is.
error LNK2019: unresolved external symbol "public: void __thiscall CMsgRecorder::SetGroupState(char)"
(?SetGroupState@CMsgRecorder@@QAEXD@Z) referenced in function "public: virtual int __thiscall
CRfSvrDriver::ProcessCommand(class ATL::CStringT<char,class strtraitmfc_dll<char,class="">
atl::chtraitscrt<char> > >,unsigned int)"
(?ProcessCommand@CRfSvrDriver@@UAEHV?$CStringT@DV?$StrTraitMFC_DLL@DV?$ChTraitsCRT@D@ATL@@@@@ATL@@I@Z)
</char></char,class>
My question is this. When I double-click on this error in output window of the IDE, it not directed to the place where I'm going wrong. I can't use GetLastError() either. Can you guys give me a clue what should I do.
Thanks a lot
I appreciate your help all the time...
Eranga
modified on Friday, January 25, 2008 2:44:01 AM
|
|
|
|
|
CMsgRecorder::SetGroupState seems has not been defined. Check its defination or show us the class declaration and the defination of the above function.
Come online at:-
jubinc@skype
|
|
|
|
|
Inline member function as follows.
public:
CMsgRecorder& GetMsgRecorder(void);
Class definition as follows.
class CMsgRecorder
{
public:
void SetGroupState(char chState)
};
I appreciate your help all the time...
Eranga
|
|
|
|
|
Yeah but were is the SetGroupState function defined ? There is just a declaration there. You need to provied a body for the function otherwise you'll get a linker error.
And BTW, you cannot double click on linker errors.
Also, modify your first post in order to remove the pre tags: if such longs strings we can only see a part of your message.
|
|
|
|
|
Ok here the body of SetGroupState()
void CMsgRecorder::SetGroupState(char chState)
{
string strName = m_DiskFile.GetFileName();
}
I used this as
m_pCtlAgent->GetMsgRecorder().SetGroupState('R');
where "m_pCtlAgent" is the control agent.
I appreciate your help all the time...
Eranga
|
|
|
|
|
I see. But why do you speak about inline functions ? Where is that inline coming form ? Did you forget something in your code ?
|
|
|
|
|
Why I use it, because that inline function(as I told earlier) is defined in another class. Inking to there is fine, just include header files. I guaranteed that it is work fine.
So basically this involve with three classes. I'll explain it much as follows,
CMsgRecorder& GetMsgRecorder(void);
defined in CFocusGroup.h
m_pCtlAgent->GetMsgRecorder().SetGroupState('R');
defined in CCmdLine.cpp
SetGroupState()
used in CMsgRecorder.cpp and CMsgRecorder.h
I appreciate your help all the time...
Eranga
|
|
|
|
|
Sorry, but it is very confusing trying to understand you
Why do you talk about inline functions if it has nothing to do with the problem and if you can guarantee that it works fine. You really need to explain your problem in a way that it is clear for people that don't see your screen.
Anyway here is your problem: you have defined a class CMsgRecorder in which you have a function (SetGroupState). You use this function somewhere else in the code and it compiles without error but fail for the linking. This is important because it tells you that the function declaration is found (so there is no problem with include files whatsoever, otherwise it would fail at compilation). The problem is that when the linker is doing its job, it cannot find a body (or a definition) for the function. You showed me the body of the function, so you've written one. The only possible 'solution' I have in mind is that you actually forgot to add the cpp file of CMsgRecorder to your project (meaning that this file is not compiled and then of course the linker cannot find the function). Are you sure it is contained in the files of your project ?
|
|
|
|
|
Yes, all files are in my project.
Also, all of these happened at compile time, not at the runtime.
I appreciate your help all the time...
Eranga
|
|
|
|
|
Eranga Thennakoon wrote: Also, all of these happened at compile time, not at the runtime
Well, I know that. That's wath I'm talking about in my previous post.
Eranga Thennakoon wrote: Yes, all files are in my project.
Sorry, but then I can't help anymore. I explained the problem clearly in my previous message, so at least you have some clues to investigate.
Are you absolutely sure that the .cpp file is in your project ? I'm not talking about including the header file with an "include" statement.
|
|
|
|
|
Cedric Moonen wrote: Are you absolutely sure that the .cpp file is in your project ?
Yes pal, this is sure. I've double checked after you ask that pal.
I appreciate your help all the time...
Eranga
|
|
|
|
|
Is it one single project or is it a solution containing several sub-projects ?
Is it a big project ? If no, would it be possible that you send everything to me by mail (only the source and header files and the solution and project files: sln and vcproj if you are using VC2005)? You can send it to cedric_moonen at hotmail dot com.
Put all those files (and only those) in a zip file. I can have a look and see if I can fix the problem.
|
|
|
|
|
Thanks pal, it is collection of sub-projects. Actually there is 7 sub-projects. I've done all the things learn until now in a same project to use as a single one. Now the size is over 30MB, even delete all debug folders. I'll try to remove all un-wanted projects and send it to you.
Also I used Visual Studio .Net 2003.
I appreciate your help all the time...
Eranga
|
|
|
|
|
Eranga Thennakoon wrote: it is collection of sub-projects.
That is probably your problem. This class (the CMsgRecorder) is part of one of your project but you try to use it in another one. The compiler can find the header file of this file but once it needs to link to it, it fails because it is not part of the same project. Am I right or not ?
You cannot do that, you cannot use classes from other projects. It is not because it is in the same solution that you can use everything from everywhere. It is exactly the same as if the projects were not in the same solution. Putting them together is just a matter of convenience, nothing else.
|
|
|
|
|
Cedric Moonen wrote: That is probably your problem. This class (the CMsgRecorder) is part of one of your project but you try to use it in another one. The compiler can find the header file of this file but once it needs to link to it, it fails because it is not part of the same project. Am I right or not ?
Yes, I think so. Since I used large number of projects, it can be happened. Now first thing I'm going to do is, remove this project from the existing one and test. Let see what I can found.
I appreciate your help all the time...
Eranga
|
|
|
|
|
Is there some limitation on the vector template that I should know about?
I have a vector of 45,000 string pointers. It's a dictionary file . Anyway, I need to iterate through these strings checking if more than one definition is present on the same line. Multiple definition are seperated with the '|' character, when I find one I create a new string and push it to the end of the vector. Simple enough you would think.
So, here is my code.
vector< LPENTRY >::iterator vIter = vEntries.begin();
while ( vIter != vEntries.end() )
{
LPSTR szEng = strchr( (*vIter)->English, '|' );
if ( szEng != NULL )
{
LPENTRY pEntry = new ENTRY;
*pEntry = *vIter;
strcpy_s( pEntry->English, MAX_LINE_LENGTH, &szEng[ 1 ] );
*szEng = 0x00;
vEntries.push_back( pEntry );
}
vIter++;
}
The problem is, when the vector grows to a size of 61447 and when pushing a new value to the end, it causes the iterator to become invalid ( pointing to 0xfeeefeee ). Hence when trying to increase it it triggers a breakpoint. Any ideas what is going wrong?
Waldermort
|
|
|
|
|
Firstly, see here[^] for the meaning of 0xfeeefeee .
See here[^] for a description of "iterator invalidation". Here's a quote:
[2] Memory will be reallocated automatically if more than
capacity() - size() elements are inserted into the vector. Reallocation does not change size(),
nor does it change the values of any elements of the vector. It does, however, increase capacity(),
and it invalidates [5] any iterators that point into the vector.
Steve
|
|
|
|
|
That value of 0xfeeefeee should have given it away. I worked around the issue by throwing out the iterator and used the indexing method instead. Though thanks for the reply
Waldermort
|
|
|
|
|
Hi...
CString str;
str = "www.google.com";
ShellExecute(NULL, "open" ,str, NULL, NULL, SW_SHOW);
this is my code....
but the error is
'ShellExecute': identifier not found.
what is the procedure for use shellexecute?
paulraj
|
|
|
|
|
|
already i included the header file...
paulraj
|
|
|
|