|
SNArruda wrote: I receive the error when was did my first test that call Move_EntradaToBaseline()...(Thread 1, STPacoteFabrica.cpp) from Doing() (Thread 2, STProfessional.cpp) and the error happen.
Sorry, but if you call a function from the worked thread, it's going to execute in the context of the worked thread, no matter if you think it should be executing in the UI thread.
SNArruda wrote: I noted that, when i put a breakpoint in the line where the error heappen, Looking for variables content, they are invalid, with dirty content or invalid pointers ... I don´t now wy this heappen.
Do you use any locking or any other technique to make sure that shared data isn't being altered by one of the threads while the other one's looking at it?
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Tanks for your attention ...
Stuart Dootson wrote:
Sorry, but if you call a function from the worked thread, it's going to execute in the context of the worked thread, no matter if you think it should be executing in the UI thread.
so, there are a way to start a function directly in a UI Thread context from worker thread context ?
Stuart Dootson wrote:
Do you use any locking or any other technique to make sure that shared data isn't being altered by one of the threads while the other one's looking at it?
Here, i have many questions about how the things happen, i´m very new about it. above you tell me about context´s ... wy the data needs to be locked before your use ? ... each context don´t have your own data ... or for example the data STPacoteFabrica::p_sPacoteFabrica (CString having a path for a diretory) belong of 2 context´s ?
There are way to attach files here ? I would like to attach the .h and .cpp files
|
|
|
|
|
SNArruda wrote: so, there are a way to start a function directly in a UI Thread context from worker thread context
Not really - although if you send/post a message to one of the UI thread's windows, the message handler will be executed in the UI thread - that's about the best way of communicating between worker and UI threads.
SNArruda wrote: wy the data needs to be locked before your use ? ... each context don´t have your own data ... or for example the data STPacoteFabrica::p_sPacoteFabrica (CString having a path for a diretory) belong of 2 context´s ?
Class members, heap allocated data - it's all visible to both threads. If the UI thread modifies some data while the worker thread is accessing it...you've got a problem. If the worker thread modifies some data while the UI thread is accessing it...you've got a problem. You use locks to ensure that only one thread can access data at a time.
Can I suggest you look at some introductory thread information? There are several on CP[^].
SNArruda wrote: There are way to attach files here ? I would like to attach the .h and .cpp files
I don't believe there are.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
have you applied some type of syncronization mechanism in your program. if not, try critcal_section
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow Never mind - my own stupidity is the source of every "problem" - Mixture
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
Support CRY- Child Relief and You
|
|
|
|
|
Tanks Alok Gupta,
I'll study the critical_section.
But, one thing resistance to go into my mind.
I have two threads. The primary thread that corresponding to UI thread and a worker thread.
There are a way to call, from a Worker thread, a function in primary thread context without messages. Simply geting a pointer and starting it.
Another example, if i create another worker thread, so, i will have a primary thread, worker_thread_1 and worker_thread_2, and will desired call from worker_thread_1::fx(), from its context, the worker_thread_2::fy(), in its own context.
I Realy need to do this, or samething like.
if you need, see my .h and .cpp files attached early
|
|
|
|
|
I've a SDI Application and want to Enable/Disable some menu items under some specific conditions. My CAppView is derived from CRichEditView and I used the following code to find if it's changed since I set the Modification Flah (using SetModify) or not:
GetRichEditCtrl().SetModify( FALSE ) ;
GetRichEditCtrl().SetModify( TRUE ) ;
if ( GetRichEditCtrl().GetModify() )
{
}
but GetRichEditCtrl().GetModify() allways returns TRUE, even if I set GetRichEditCtrl().SetModify( TRUE )
Any idea?
Thank you masters!
|
|
|
|
|
Look at the usage of the ON_UPDATE_COMMAND_UI macro.
|
|
|
|
|
Jusef Marzbany wrote: but GetRichEditCtrl().GetModify() allways returns TRUE, even if I set GetRichEditCtrl().SetModify( TRUE )
You use GetRichEditCtrl().SetModify( FALSE ) to reset the modification flag to false - see here[^].
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
I'm trying to create a small function for a program that should extract the data as a string from a column of a tab delimited text file. It seems to be returning an empty string though.
Let me know if you notice what's wrong with this function. Edit: this is VC++
Function:
string split_row(string line, int column)
{
int c_temp;
string data;
int pos;
const string delimiter = "\t";
for(c_temp=1; c_temp<=9; c_temp++)
{
pos = line.find_first_of(delimiter);
if (c_temp != column)
{
line.erase(0, pos);
}
else
{
data = line.substr(0, pos-1);
break;
}
}
return data;
}
If the string "row", below, were to be:
12 test Phone 2009
And we called split_row(row, 2) it should return "test Phone".
Thanks! (sorry for the stupid username)
|
|
|
|
|
This code (changed bits in bold) seems to work with your test data. I suspect you were forgetting that ranges in STL are half-open, i.e. the last character in the range specification isn't part of the range.
string split_row(string line, int column)
{
int c_temp;
string data;
int pos;
const string delimiter = "\t";
for(c_temp=1; c_temp<=9; c_temp++)
{
pos = line.find_first_of(delimiter);
if (c_temp != column)
{
line.erase(0, pos+1);
}
else
{
data = line.substr(0, pos);
break;
}
}
return data;
}
Ought to add a check that pos != std::string::npos, as that indicates no tab, so a possible error condition.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Works perfectly with your change. Thank you very much!
|
|
|
|
|
I am developing a new software driver. The software will be package into DLL. I would like to store the configuration information for the DLL in a XML file.. I found lots of different XML Parser pojects on Code Project. However, i would prefer to use one from msdn if there is one available. Does anyone have any recomendations.
Scott
Scott Dolan
Jernie Corporation
Engineering & Manufacturing
Software, Hardware, & Enclosures
|
|
|
|
|
ScotDolan wrote: i would prefer to use one from msdn if there is one available
I bet there is [^].
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]
|
|
|
|
|
If you don't want to use MSXML, there is an alternative[^] from MS that claims to be 'lighter'.
Java, Basic, who cares - it's all a bunch of tree-hugging hippy cr*p
|
|
|
|
|
Is there a way in C++ to serialize objects into a char buffer without using reinterpret_cast or c-style casting (and backwards on the other end)? I also don't want to use C++ streams. I don't care how difficult it is.
Thanks
|
|
|
|
|
IMHO your requirements are not wise (why do you want to avoid cast?).
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]
|
|
|
|
|
c-style cast is dangerous and hard to find in code. reinterpret_cast is not portable and just as dangerous as c-style. i want a typed way to serialize/deserialize.
|
|
|
|
|
Member 2603772 wrote: c-style cast is dangerous and hard to find in code.
I don't think so. In your case, moreover, the cast is well scoped.
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]
|
|
|
|
|
memcpy
Anyone who thinks he has a better idea of what's good for people than people do is a swine.
- P.J. O'Rourke
|
|
|
|
|
memcpy
Thought about this one but that would require us to cast to void*. He's saying we cannot use c-style casts too.
|
|
|
|
|
Ah, yes, he wants the MagicalSerialization() function.
Anyone who thinks he has a better idea of what's good for people than people do is a swine.
- P.J. O'Rourke
|
|
|
|
|
Joe Woodbury wrote: Ah, yes, he wants the MagicalSerialization() function.
That's exactly the point.
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]
|
|
|
|
|
If the answer is "It's impossible" that's fine. That's why I'm asking, because I don't know if a solution exists that satisfies my parameters.
|
|
|
|
|
|
Thanks for the info. I'll take a look at the Boost serialization code to see how it is written.
|
|
|
|