|
Thanks Roger,
This is what you mentioned before about your sample. In my understanding, the main thread should be the STA thread which contains the COM component, the worker thread should be the thread as client to invoke/use the main thread.
Why do you think the main thread will send message to the worker thread? I think in order for the worker thread as COM client to invoke the main thread, it should send message to the main thread?
Please feel free to correct me if I am wrong.
--------------------
You send a user defined message from the main thread to the worker thread with ::SendMessage()
--------------------
regards,
George
|
|
|
|
|
George_George wrote: Why do you think the main thread will send message to the worker thread?
This was only an example of how the message queue of the STA thread can be blocked.
It has nothing to do with your code.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Thanks Roger,
I think I almost get your idea. Let me repeat to see whether my understanding is correct.
1. You create main thread (STA) and the worker thread (as COM client);
2. Worker thread will call the main thread, through marshelling;
3. When the main thread receives the method call in (2), it will call some method in worker thread through ::SendMessage, and will wait for reply from worker thread;
4. Since worker thread in (2) will be in wait status for main thread to return its call, the method call from main thread to the worker thread in step (3) will be blocked -- since the worker thread is in waiting status.
My understanding correct?
I think it is a situation when the main thread and the worker thread will wait for each other at the same time, it should be called deadlock??
regards,
George
|
|
|
|
|
Iain Clarke wrote: Wouldn't other apartments get their own copy of the com object, so it wouldn't block?
The following assumes the object being created lives in STAs:
- If another thread creates the object and the thread is a STA then a new object is created "in" that thread.
- If another thread creates the object and the thread is NOT in a STA then the object is created in an STA and the interface pointer is marshaled back to the creating thread.
Steve
|
|
|
|
|
Makes sense. I'm just glad I didn't pretend to be all expert! (For a change)
Iain.
Iain Clarke appears because CPallini still cares.
|
|
|
|
|
Cool and makes sense, Steve!
regards,
George
|
|
|
|
|
Hi all...
I'm trying to set the focus on my edit box with the help of following code
PostMessage(GetDlgItem(hPage1, IDC_EDIT1), WM_SETFOCUS, 0, 0);
This works fine as it set the focus but when i try to write anything on edit box it doesn't accept... Also when i press TAB button after that it behaves normally i.e it allows you to write...
what could be the problem??
Thanks..
Ash..
|
|
|
|
|
AFAIK, the WM_SETFOUCS message is not used to set foucs to a control. But it is send to notify that the window has got the Focus.
You should use SetFoucs() function to set focus to a control.
|
|
|
|
|
Thanks for your reply Naveen..
I tried SetFocus Also but using SetFocus doesn't set Focus on edit box..Also i tried to set focus using SendMessage with appropriate parameter but it behave like PostMessage only...
Ash..
|
|
|
|
|
Ashish Chauhan wrote: tried SetFocus Also but using SetFocus doesn't set Focus on edit box
Inside which functon ur calling the SetFoucs()? Also I hope u have called the SetFoucs() as follows
m_edit.SetFocus();
Where m_edit is the member variable of the CEdit.
|
|
|
|
|
Well it's Non-MFC Application...
I'm working on property sheet which contains 4 tabs(Property Pages)..On first tab(Page) i'm using controls(Edit Box,Radio Button, Check Button etc)... So i want whenever the page initializes the focus should be on my edit box..
I'm using SetFocus on "case WM_INITDIALOG"
Ash..
|
|
|
|
|
Ashish Chauhan wrote: I'm using SetFocus on "case WM_INITDIALOG"
1) Did u try setting the tab order?
or
2) If you have called the SetFoucs() inside the WM_INITDIALOG, then the WM_INITDIALOG must return FALSE. Other wise there will not be any effect for the SetFoucs().
|
|
|
|
|
Can you elaborate more on setting the tab order? Or may be you can redirect me to appropriate tutorials...
Ash..
|
|
|
|
|
Also the edit box is on first tab only and it's the default page..
Ash..
|
|
|
|
|
Do the property sheet have a parent dialog? If so what did the WM_INITDIALOG of dialog return?
I think Dialog, Property sheet and Property page should return FALSE in response to WM_INITDIALOG..
|
|
|
|
|
Yeah right Naveen it's returning FALSE...
Nope property sheet don't have parent dialog...
Ash..
|
|
|
|
|
|
|
Why are you not using WM_NEXTDLGCTL ?
"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,
Is there an easy way to convert a date in string format for example
a = "Fri Oct 13 01:32:38 CDT 2006"
then converts it to
"Fri 13 Oct 2006 01:32:38 -0500"
or
"Fri 13 Oct 2006 01:32:38 CDT"?
Is there a function for that or I need to parse it?
any suggestion if I need to parse it are highly appreciated.
Thanks,
Jj
|
|
|
|
|
If you could somehow manage to get the string formatted like "Oct 13, 2006 01:32:38", then you could use COleDateTime::ParseDateTime() . If not, you can easily parse it yourself.
"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
|
|
|
|
|
Can you you give me a little guide on how to do that? I need to parse it without using OLE
Thanks David
|
|
|
|
|
The fact that you know OLE exists tells me that you are more than capable of figuring this out.
string strDate = "Fri Oct 13 01:32:38 CDT 2006";
string strDOW = strDate.substr(0, 3);
string strMonth = strDate.substr(4, 3);
int nDay = atoi(strDate.substr(8, 2)); Once you have all seven pieces extracted, you can then populate one of the date-related structures (e.g., tm ). You can use a function like mktime() to convert that structure into a fully defined structure with normalized values.
"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
|
|
|
|
|
I'm using a static control to draw something on it.
the static is in a dialog create by resource editer.
It's strange that I can draw outside the static contol, but not outside the dialog.
How can I prevent this? I want to draw only inside the static contol.
|
|
|
|
|
Check out the CS_PARENTDC windows class style for information on why this happens. One solution is simply not to draw outside the window! Another is to set a clipping region with the GetDCEx function.
Steve
|
|
|
|