|
Thanks for this Stephen, you have hit the nail on the head, I think, regarding the access violation. I have had a reply indicating that my use of CString objects is causing this. I will investigate this.
|
|
|
|
|
I took a brief look at your article. I have some humble comments/observations.
1.) Yes you should get rid of the call to Sleep. I have never found any use for this API call and in my opinion it is probably the most abused function on planet Earth. I recommend the following:
a) Add: HANDLE hEvent; to your CFormView.
b) Call hEvent = CreateEvent(NULL,FALSE,FALSE,"Your-GUID"); in your constructor.
c) Call SetEvent(hEvent); in your OnCURFILEEVENT message handler.
d) Replace the Sleep(1) with: WaitForSingleObject(hEvent,1000); and then reset the event with ResetEvent(hEvent); immediately afterwards.
2.) Regarding your access violation... I instantly recognized the problem. You are incorrectly accessing a CString object that lives inside your CFormView from the worker thread. CString is NOT thread-safe. You need to replace the pMyView->m_strCurFile assignment with a message function such as SendMessageTimeout[^] and this will fix the Access Violation in your article.
Best Wishes,
-David Delaune
|
|
|
|
|
I am very grateful to you, David, for looking at my code. You only looked at it briefly but were able to provide me with these very specific points of help. It's humbling for me because it will take longer for me to try them out than it took for you to look through my code, understand what I was trying to do and make these suggestions. I will go through them carefully, though. You clearly know what you are writing about.
|
|
|
|
|
Hi Dave,
I've got the project working with the following alterations...
Here is the sending code in MakeListing...
CString* pString = new CString(FindFileData.cFileName);
SendMessageTimeout(pMyView->GetSafeHwnd(), CURFILEEVENT, (WPARAM)pString, 0, 0, 1000, 0);
delete pString;
Here is the receiving function...
LRESULT CRecThread2008_64Dlg::OnCURFILEEVENT(UINT wParam, LONG lParam)
{
CString* pString = (CString*)wParam;
CString tempStr = pString->GetBuffer();
m_iNoFiles++;
CString tString=LPCTSTR("");
tString.Format(_T("%d"),m_iNoFiles);
m_strNoFiles = tString;
m_strFileList= tempStr + _T("\r\n")+ m_strFileList;
m_strFileList = m_strFileList.Left(500);
UpdateData(FALSE);
return 0;
}
And it works without the sleep block - so I have got rid of that!
I think I getting near to a point where I can start to rewrite the article...
Thank you for your help with this,
Ben.
|
|
|
|
|
David, the code and article is rewritten, now. Thanks so much for your help. I used SendMessageTimout and it worked nicely!
Thanks,
Ben.
|
|
|
|
|
HI all,
i m sending SMS using AT commands in Text mode,its works fine.
now one problem is occur i m not able to send sms more than 160 words.
so please tell me how do i send a long sms exceeding 160 characters using AT command.
please tell me how can i do this.
thanks in advance.
|
|
|
|
|
Have you heard of Google? txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
Hi all,
i m using AT commands to send SMS,
I need to find out how to hide your number, so that the receiver will either see a message with no sender or even better a sender with characters as their number, e.g From: "Service".
i want if any recepient receive my SMS ,SMS display a Name that is i m set instead of my phone number.
please help me for this.
tahnks.
|
|
|
|
|
I knew helping you with SMS was going to be an issue - I can think of no good/nice/honset reason for doing what you suggest - I urge anyone else here not to respond if they know a way of doing it.
'g'
|
|
|
|
|
Fortunately, for the rest of us, this feature is not allowed, as message identification is controlled by the network provider. Short answer, you cannot do it. txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
Just curious.
Why?Watched code never compiles.
|
|
|
|
|
I really need to do this.
|
|
|
|
|
Le@rner wrote: I really need to do this.
Why?txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
ok, but why you need to hide the identity of the sender ?
I'm just curious. Watched code never compiles.
|
|
|
|
|
I making an sms sender application and i dont want to display me number to all reciepients.
|
|
|
|
|
for me i want to show the name of the campany instead of the number , any help??
|
|
|
|
|
Is it possible to create another logical(secondary) desktop on windows xp so that I can run my application on more resolution . Trioum
|
|
|
|
|
What do you mean by more resolution? Your question is not very clear. txtspeak is the realm of 9 year old children, not developers. Christian Graus
|
|
|
|
|
Me think he wants to create a virtual desktop, larger than the actual desktop), so you can scroll the whole desktop and place application in position outside of the screen "physical viewport".
I think I've seen this on linux.Watched code never compiles.
|
|
|
|
|
Ya you are right I need this type of desktop so that I can extend my application on that desktop Trioum
|
|
|
|
|
Do you mean something like This[^]? Wout Louwers
|
|
|
|
|
Suppose I have the following:
(in class_a.h):
class Foo;
class ClassA
{
public:
typedef std::vector< boost::shared_ptr<Foo> > Foos;
Foos makeFoos() const;
};
and in another class, I have a method that makes use of a vector of
Foos. Should I do this:
(Try #1, class_b.h):
#include "class_a.h"
class ClassB
{
public:
void useFoos(const ClassA::Foos& foos);
};
or just repeat the typedef in class_b.h like this:
(Try #2, class_b.h):
class Foo;
class ClassB
{
public:
typedef std::vector< boost::shared_ptr<Foo> > Foos;
void useFoos(const Foos& foos);
};
Try #1 seems bad because it creates a dependency between class_a.h and
class_b.h when all I want is the typedef for Foos. Try #2 repeats the
typedef, so it seems like I'm repeating code which also seems bad, but
not as bad as Try #1. Repeating typedefs also becomes less attractive
when the thing I'm typedef'ing is non-trivial.
Perhaps I should I break out the Foos typedef into it's own header (perhaps
the header file for class Foo?) and have both class_a.h and class_b.h
include that?
Thanks!
-- Arcadio
|
|
|
|
|
Since the typedef is common to both classes you should put that in a common header.
|
|
|
|
|
#1 - clumsy, forcing an unneeded dependency for Foos on ClassA.
#2 - bad, semantically if not syntactically.
asincero wrote: Perhaps I should I break out the Foos typedef into it's own header (perhaps
the header file for class Foo?) and have both class_a.h and class_b.h
include that?
Yes.
Foo.h:
class Foo;
typedef std::vector< boost::shared_ptr<Foo> > VectorSharedPtrFoo;
class Foo { ... };
or,
class Foo {
typedef std::vector< boost::shared_ptr<Foo> > VectorSharedPtr;
};
I usually prefer the former.
In general, do not define a type in a class unless it is specific to that class.
... and do you _really_ want to return a vector from ClassA::makeFoos() ?
The newer compilers can try to optimize out the copy, but you're never sure.
Usually better to pass a non-const ref as an output parameter....cmk
The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.
- John Carmack
|
|
|
|
|
Hi Members
I am try to hook keybord ON WINDOWS 7.I find some artical from codeguru.I have little dot.When i write some word on notepad and office document then it's working.But when i going on Internet explorer or mozila then working something wrong.
[]
In mozila alwalys call double processkey(..)
In Internet explorer when i type on address bar the function call
processkey(..) but when i type something on web page the function not call.
If any thing wrong then sorry .I have no clue how to solve that problem.Please help me.
|
|
|
|