|
Member 4708266 wrote: bar. For your experiment you can create a simple xml file and open it in your IE. I hope you
ok, get it, the same warning "bar" that comes up when there's a popup window ?
|
|
|
|
|
The following lines of code generate a unhandled exception in reading memory location error in my MFC program
Can anyone please tell the reason
//The CUIThread class
class CUIThread : public CWinThread
{
DECLARE_DYNCREATE(CUIThread)
public:
virtual BOOL InitInstance();
};
IMPLEMENT_DYNCREATE(CUIThread,CWinThread)
BOOL CUIThread::InitInstance()
{
m_pMainWnd=new CMainWindow;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
return TRUE;
}
//The CMainWindow class
class CMainWindow : public CFrameWnd
{
public:
CMainWindow();
protected:
afx_msg void OnLButtonDown(UINT,CPoint);
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMainWindow,CFrameWnd)
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
CMainWindow::CMainWindow()
{
Create(NULL,_T("UI Thread Window"));
}
void CMainWindow::OnLButtonDown(UINT nFlags,CPoint point)
{
PostMessage(WM_CLOSE,0,0);
}
CWinThread *pThread=AfxBeginThread(RUNTIME_CLASS(CUIThread));
|
|
|
|
|
sriram65 wrote: The following lines of code generate a unhandled exception in reading memory location error in my MFC program...............
All of them??
How odd.
Have a look at your call stack when your application generates the exception and provide information about which line is generating the exception.
You'll probably find the last reference to your code a few frames down.
Before you provide that info it's not worth digging in to.
And please put your code inside <pre></pre> tags for proper formatting.
"It's supposed to be hard, otherwise anybody could do it!" - selfquote "High speed never compensates for wrong direction!" - unknown
|
|
|
|
|
Just a stab...
sriram65 wrote: m_pMainWnd=new CMainWindow;
m_pMainWnd->ShowWindow(SW_SHOW); <<---does the window exist yet?
m_pMainWnd->UpdateWindow();
maybe put these in an OnCreate handler?
|
|
|
|
|
No no no - that won't work. The window needs to be created on the
new UI thread
(at least that's what it appears the OP is doing)
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Ahh, thanks
|
|
|
|
|
The error is during Run time
The pointer to the thread "pThread" suddenly changes value to zero on going through InitInstance() function.
Even if i don't create a window derived from CFrameWnd it is generating the error.
The Window derived from CFrameWnd is created but the error is also generated at run time.
|
|
|
|
|
The exception occurs at
if(!pThread->InitInstance){.............} of predefined winmain.cpp
Error occurs in that if statement
The pThread value changes to zero for some reason.
|
|
|
|
|
Your code as shown works fine for me.
Where are you calling AfxBeginThread() from?
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Sorry for the late reply.Iam calling AfxBeginThread globally.that is iam not calling inside any function or class Iam calling where they usually create the objects of the class
|
|
|
|
|
How? Can you show how you do that?
If you put a breakpoint on the call, is it getting hit?
You may get better results if you call it from the InitInstance() override
of your CWinApp class - before that, MFC may not be initialized yet.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Iam not using CWinApp class
Iam using only CWinThread class
I have to instantiate the application using AfxBeginThread
So InitInstance() won't be called unless I call AfxBeginThread globally.
InitInstance gets called only when a object is created
|
|
|
|
|
An MFC app has to have ONE CWinApp object.
That's by design. Why are you trying to do it differently?
You need a thread running to create another thread
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Sorry for the very very very late reply and thanks a lot now understood
|
|
|
|
|
questions and statements for (your) confirmation:
* more than one device can be associated to an IOCP
* each device would have its own thread pool
* each thread pool is associated to a particular function. which is why ANY of the threads (although usually the last in) in the pool can be awakened each time there is a new entry in the completion queue.
* somehow IOCP knows which thread in a pool to wake up depending on which IOCP-associated device has a completed IO request.
thanks in advance.
----------------------------------------------------------
"unzip; strip; touch; finger; mount; fsck; more; yes; unmount; sleep" - my daily unix command list
|
|
|
|
|
swjam wrote: more than one device can be associated to an IOCP
True (more than one handle - not necessarily device).
swjam wrote: each device would have its own thread pool
False. The number of threads in the pool is determined by how many threads
are waiting on the completion port with GetQueuedCompletionStatus().
swjam wrote: each thread pool is associated to a particular function. which is why ANY of the threads (although usually the last in) in the pool can be awakened each time there is a new entry in the completion queue.
False.
swjam wrote: somehow IOCP knows which thread in a pool to wake up depending on which IOCP-associated device has a completed IO request.
False. You can make no assumptions on which thread waiting in GetQueuedCompletionStatus()
will "wake up", unless you only have one thread in the pool.
Mark
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Wow. Early for you, what up?
led mike
|
|
|
|
|
LMAO!
Since you asked, I had mexican food last night that's just not digesting...
I couldn't sleep any longer!
Hmm usually I'm turning my computer on about now...
It's good to work at home
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Mark Salsbery wrote: False. The number of threads in the pool is determined by how many threads
are waiting on the completion port with GetQueuedCompletionStatus().
i'm still tad confused
say multiple devices are associated to a completion port. surely each function will be different for each thread associated with a device? how then does the system know which one to wake up when an entry appears in the competion queue?
----------------------------------------------------------
"unzip; strip; touch; finger; mount; fsck; more; yes; unmount; sleep" - my daily unix command list
|
|
|
|
|
IOCPs are a bit confusing at first
swjam wrote: surely each function will be different for each thread associated with a device?
Not so. There's no parameter passed to GetQueuedCompletionStatus() that associates
the thread with a certain device. You'll need to provide any association yourself
in your overlapped structures.
swjam wrote: how then does the system know which one to wake up when an entry appears in the competion queue?
It's undocumented, but it may just take the next thread waiting in
GetQueuedCompletionStatus(). There's no particular order or association with
a certain thread.
These articles helped me a lot when I first used an IOCP.
They are socket-related but the same principles apply to any
overlapped IO device...
Writing Windows NT Server Applications in MFC Using I/O Completion Ports[^]
Write Scalable Winsock Apps Using Completion Ports[^]
INFO: Design Issues When Using IOCP in a Winsock Server[^]
Mark Salsbery
Microsoft MVP - Visual C++
|
|
|
|
|
Hi,
I just downloaded WinObj doesn't seem like there is much documentation
Anyway here is my Question
If while stepping thru my Code (Debugging) after I execute CreateEvent (with name) I get a Handle Back
If I then Bring up WinObj Shouldn't I see that Event if I open up the Kernel Object folder
|
|
|
|
|
hello,
i have one integer array....{1,12,3,64,555}
i need to convert each integer as "CString"
i try to use Format() like
ex:
CString str;
int i=0;
str.Format("%d",i);
It wasa giving an Error.
Can any one help me in this regard.
Thanks in advance....!!!!!
|
|
|
|
|
I can't see anything wrong with this code. What error are you getting?
|
|
|
|
|
phanindra varma wrote: str.Format("%d",i);
Are you doing a fully Unicode build? Are you missing the _T macro? Have you tried: str.Format(_T("%d"),i); instead?
Many are stubborn in pursuit of the path they have chosen, few in pursuit of the goal - Friedrich Nietzsche
.·´¯`·->Rajesh<-·´¯`·.
[Microsoft MVP - Visual C++]
|
|
|
|
|
That's pretty much the only explanation for this code to fail...
|
|
|
|