Problem with blocking of main thread with other thread

I have a problem with blocking of main thread:

My application contains an interpreter and I need to write a debugger 
for it.

The mainframe creates a thread that is interpreting instructions. When I 
need to break execution of instruction thread, I use
WaitForSingleObject(m_WaitEventHandle, INFINITE);
in the interpreter thread.

Everything works fine until the window is opened from the interpreter. 
Then the mainframe freezes.

When I break execution in VC the call stack for interpreter thread shows:

� NTDLL!
� KERNEL32!
� CDebugManager::CheckBreakpoints()
� CInterpreterThread::Run()
� _AfxThreadEntry()
� _threadstartex()
� KERNEL32!

call stack for the mainframe:
� CWinThread::Run()
� CWinApp::Run()
� AfxWinMain()
� WinMain()
� WinMainCRTStartup()
� KERNEL32!


The window opened from interpreter is descendant of CDialog and is 
created by calling CDialog::Create(IDD_DIALOG_BASE)

What can be wrong?
Is it a way to find out why the main thread is blocking?

Thanks for any help.
0
TX
7/10/2005 12:26:16 AM
vc.mfc 33608 articles. 0 followers. Follow

5 Replies
821 Views

Similar Articles

[PageSpeed] 16

TX wrote:
> I have a problem with blocking of main thread:
> 
> My application contains an interpreter and I need to write a debugger 
> for it.
> 
> The mainframe creates a thread that is interpreting instructions. When I 
> need to break execution of instruction thread, I use
> WaitForSingleObject(m_WaitEventHandle, INFINITE);
> in the interpreter thread.
> 
> Everything works fine until the window is opened from the interpreter. 
> Then the mainframe freezes.
> 
> When I break execution in VC the call stack for interpreter thread shows:
> 
> � NTDLL!
> � KERNEL32!
> � CDebugManager::CheckBreakpoints()
> � CInterpreterThread::Run()
> � _AfxThreadEntry()
> � _threadstartex()
> � KERNEL32!
> 
> call stack for the mainframe:
> � CWinThread::Run()
> � CWinApp::Run()
> � AfxWinMain()
> � WinMain()
> � WinMainCRTStartup()
> � KERNEL32!
> 
> 
> The window opened from interpreter is descendant of CDialog and is 
> created by calling CDialog::Create(IDD_DIALOG_BASE)
> 
> What can be wrong?
> Is it a way to find out why the main thread is blocking?
> 
> Thanks for any help.

The main call stack does not look frozen: CWinThread::Run is the main 
message pump.  Assuming that you have installed the MFC source files, a 
double-click on the top line of the stack will show you where the main 
thread is executing.

Does your main thread attempt to access the dialog or dialog controls 
created in the second thread?  That would cause a deadlock if the second 
thread is in WaitForSingleObject.  The second thread cannot maintain a 
window while it is in WaitForSingleObject.  It is best to put all 
windows in the main thread.

-- 
Scott McPhillips [VC++ MVP]

0
Scott
7/10/2005 4:14:06 AM
I've written many interpreters. Blocking the main  thread is ALWAYS a mistake. 

You have not said what the child thread is doing. The key phrase here is "until the window
is opened". Who "opens"  "the window"? You have not said who opens it, or what window it
is. I can imagine any number of cases where you have created a canoncical deadlock
situation. 

One question is "how fast does your interpreter have to be?" A low-speed interpreter can
use a lot of really simple tricks to handle interpreter sequencing at the byte-code level.
For a high-speed interpreter (need to execute hundreds of thousands of byte codes per
second), even putting a WaitForSingleObject on a debug event is going to seriously impact
performance. 

It doesn't matter what the stack looks like; key to all of this is to remove ANY
WaitFor... from the main GUI thread, period; and preferrably, remove the WaitFor... from
the interpreter thread.

First trick: you PostThreadMessage a user-defined message to a UI thread. The PostMessage
says "execute". When the message is dequeued (I used a UI thread to handle this). When in
Run mode, the interpreter forces a PostThreadMessage to execute the next byte code. In
single-step mode, or when you hit the "break" button on your control panel, you set a
Boolean that stops this message from being posted. So it simply executes one step of the
interpreter and stops. I had an interpreter that allowed single-byte-code debug and
statement-at-a-time debug (in fact, it was the first Windows program I wrote).

Now this does have a limitation on performance. For the code I was interpreting (a simple
language akin to BASIC in its semantics but bearing a strong resemblance to C in its
syntax), the average program was a couple hundred lines, had very few loops (just
enumerating database items), and usually completed execution by the time the user realized
the mouse had clicked.

More than a decade later, I used the same technique in my HP16C emulator. Same
low-performance issues made it feasible.

Now, if I needed performance, I'd probably do something like


while(TRUE)
   { /* thread loop */
     ::WaitForSingleObject(runEvent, INFINITE);
     while(interpreting)
        { /* interpreter loop */
          interpretOneOp();
          if(breakflag)
              break; // leave interpreter loop
        } /* interpreter loop */
     gui->PostMessage(UWM_INTERPRETER_STOPPED);
    } /* thread loop */
gui->Postmessage(UWM_SHUTDOWN);

Note that this runs the interpreter at "full speed" unless the breakflag is set. The
"break" button on your control panel/menu will ResetEvent() and set this flag (in that
order!); the "run/resume" item (think F5 key) will clear this flag and SetEvent().
Single-step will set the brekflag and then do a SetEvent(). Note that if the interpreter
is stopped, it is impossible to kill the thread; see my essay on worker threads and how to
use a ShutdownEvent and WaitForMultipleObjects to terminate the main thread loop. Note
that this algorithm removes the WaitFor[Single/Multiple] object from the main interpreter
loop.

Now, the way the main GUI thread determines the interpreter has stopped interpreting is
because it receives the UWM_INTERPRETER_STOPPED message. 

Note this now shows you a general mechanism. For example, you can have the generic
breakflag, which says "stop the interpreter loop" but you can also have a "reason" which
encodes why it stopped, and you could pass this back in the wParam. For example, "array
index out of bounds" would implicitly set the break flag, and set the reason.

Another mechanism is to put the interpreter loop inside a try/catch construct  (we did
this back in 1967 when we built an interactive interpreted language at CMU called "LCC")

while(TRUE)
     { /* thread loop */
      WaitForSingleObject(runEvent, INFINITE);
      try 
         {
          while(TRUE)
              { /* interpreter loop */
               interpretOneOp();
               if(breakflag)
                   throw new CInterpreterBreakException( );
             } /* interpreter loop */
         } 
     catch(CInterpreterException * e)
        {
          ResetEvent(runEvent);
          gui->PostMessage(UWM_INTERPRETER_EXCEPTION, (WPARAM)e);
       }
    } /* thread loop */

The recipient then can interpret the CInterpreterException and call the Delete method on
the exception when it is done.

Now CInterpreterException is a subclass of CException, and it in turn has subclasses such
as CInterpreterArrayBoundsException, CInterpreterDivideByZeroException,
CInterpreterIsReallyConfusedException, and the one I show abouve,
CInterpreterBreakException. 

The try block is outside the interpreter loop, so it only has to be called once, because
exception handler setup/teardown is realtively slow.  Expect that the interpreter loop is
going to be screamingly fast under this model (limited only by the computations
themselves).

By the way, the way I implemented the interpreter was that I just had the parse tree of my
language, enhanced in some minor ways (alas, the advantages of multiple inheritance would
show up well here, but it has a lot of other problems), and each node, which was a
subclass of the abstract superclass TreeNode, had an Interpret method. So 

class OpAdd : public BinaryNode {
      public:
            void Execute() { int R = stack.pop(); int L = stack.pop(); stack.push(R + L);
};

class BinaryNode : public TreeNode {
     public:
           TreeNode * left;
            TreeNode * right;
           void Execute() PURE;
};

class TreeNode {
   public:
         void Execute() PURE;
};

class LeafNode : public:TreeNode {
    public:
         void Execute() PURE;
};

class intval : public  LeafNode {
    public:
         int value; // literal integer value
         void Execute() { stack.push(value); }
};

class variable : public LeafNode {
    public:
          CString name;
          void Execute() { var * v = Lookup(name); 
                                        if(!v->initialized)
                                          throw new CInterpreterUsedUninitializedVariable;
                                        stack.push(v->value);
                                      }

This should give you a number of ideas.
				joe

         
On Sun, 10 Jul 2005 02:26:16 +0200, TX <tx@tx> wrote:

>I have a problem with blocking of main thread:
>
>My application contains an interpreter and I need to write a debugger 
>for it.
>
>The mainframe creates a thread that is interpreting instructions. When I 
>need to break execution of instruction thread, I use
>WaitForSingleObject(m_WaitEventHandle, INFINITE);
>in the interpreter thread.
>
>Everything works fine until the window is opened from the interpreter. 
>Then the mainframe freezes.
>
>When I break execution in VC the call stack for interpreter thread shows:
>
>� NTDLL!
>� KERNEL32!
>� CDebugManager::CheckBreakpoints()
>� CInterpreterThread::Run()
>� _AfxThreadEntry()
>� _threadstartex()
>� KERNEL32!
>
>call stack for the mainframe:
>� CWinThread::Run()
>� CWinApp::Run()
>� AfxWinMain()
>� WinMain()
>� WinMainCRTStartup()
>� KERNEL32!
>
>
>The window opened from interpreter is descendant of CDialog and is 
>created by calling CDialog::Create(IDD_DIALOG_BASE)
>
>What can be wrong?
>Is it a way to find out why the main thread is blocking?
>
>Thanks for any help.

Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
0
newcomer (15972)
7/10/2005 5:02:31 AM
Scott McPhillips [MVP] wrote:
> TX wrote:
> 
>> I have a problem with blocking of main thread:
>>
>> My application contains an interpreter and I need to write a debugger 
>> for it.
>>
>> The mainframe creates a thread that is interpreting instructions. When 
>> I need to break execution of instruction thread, I use
>> WaitForSingleObject(m_WaitEventHandle, INFINITE);
>> in the interpreter thread.
>>
>> Everything works fine until the window is opened from the interpreter. 
>> Then the mainframe freezes.
>>
>> When I break execution in VC the call stack for interpreter thread shows:
>>
>> � NTDLL!
>> � KERNEL32!
>> � CDebugManager::CheckBreakpoints()
>> � CInterpreterThread::Run()
>> � _AfxThreadEntry()
>> � _threadstartex()
>> � KERNEL32!
>>
>> call stack for the mainframe:
>> � CWinThread::Run()
>> � CWinApp::Run()
>> � AfxWinMain()
>> � WinMain()
>> � WinMainCRTStartup()
>> � KERNEL32!
>>
>>
>> The window opened from interpreter is descendant of CDialog and is 
>> created by calling CDialog::Create(IDD_DIALOG_BASE)
>>
>> What can be wrong?
>> Is it a way to find out why the main thread is blocking?
>>
>> Thanks for any help.
> 
> 
> The main call stack does not look frozen: CWinThread::Run is the main 
> message pump.  Assuming that you have installed the MFC source files, a 
> double-click on the top line of the stack will show you where the main 
> thread is executing.
> 
> Does your main thread attempt to access the dialog or dialog controls 
> created in the second thread?  That would cause a deadlock if the second 
> thread is in WaitForSingleObject.  The second thread cannot maintain a 
> window while it is in WaitForSingleObject.  It is best to put all 
> windows in the main thread.
> 

Now I break execution again and the call stack for main thread shows this:

------------------------
� USER32! 77e1392f()
� USER32! 77e15709()
� CFrameWnd::NotifyFloatingWindows()
� CFrameWnd::OnActivate()
� CWnd::OnWndMsg()
� CWnd::WindowProc()
� AfxCallWndProc()
� AfxWndProc()
� AfxWndProcBase()
� USER32! 77e12e98()
� USER32! 77e139a3()
� USER32! 77e1395f()
� NTDLL! 77fa032f()
� CWinThread::PumpMessage()
� CWinThread::Run()
� CWinApp::Run()
� AfxWinMain()
� WinMain()
� WinMainCRTStartup()
� KERNEL32! 77e97d08()
------------------------

When I double-click on CFrameWnd::NotifyFloatingWindows(), the source of 
WinFrm.cpp shows the line marked with =====>


------------------------
void CFrameWnd::NotifyFloatingWindows(DWORD dwFlags)
{
	ASSERT_VALID(this);
	ASSERT(m_hWnd != NULL);

	// get top level parent frame window first unless this is a child window
	CFrameWnd* pParent = (GetStyle() & WS_CHILD) ? this : GetTopLevelFrame();
	ASSERT(pParent != NULL);
	if (dwFlags & (FS_DEACTIVATE|FS_ACTIVATE))
	{
		// update parent window activation state
		BOOL bActivate = !(dwFlags & FS_DEACTIVATE);
		BOOL bEnabled = pParent->IsWindowEnabled();

		if (bActivate && bEnabled && pParent != this)
		{
			// Excel will try to Activate itself when it receives a
			// WM_NCACTIVATE so we need to keep it from doing that here.
			m_nFlags |= WF_KEEPMINIACTIVE;
			pParent->SendMessage(WM_NCACTIVATE, TRUE);
			m_nFlags &= ~WF_KEEPMINIACTIVE;
		}
		else
		{
			pParent->SendMessage(WM_NCACTIVATE, FALSE);
		}
	}

	// then update the state of all floating windows owned by the parent
	HWND hWnd = ::GetWindow(::GetDesktopWindow(), GW_CHILD);
	while (hWnd != NULL)
	{
		if (AfxIsDescendant(pParent->m_hWnd, hWnd))
			::SendMessage(hWnd, WM_FLOATSTATUS, dwFlags, 0);
=====>		hWnd = ::GetWindow(hWnd, GW_HWNDNEXT);
	}
}
------------------------

In hWnd is the handle of the window that was opened from the interpreter...
0
TX
7/10/2005 9:27:58 AM
TX wrote:
> When I double-click on CFrameWnd::NotifyFloatingWindows(), the source of 
> WinFrm.cpp shows the line marked with =====>
>     // then update the state of all floating windows owned by the parent
>     HWND hWnd = ::GetWindow(::GetDesktopWindow(), GW_CHILD);
>     while (hWnd != NULL)
>     {
>         if (AfxIsDescendant(pParent->m_hWnd, hWnd))
>             ::SendMessage(hWnd, WM_FLOATSTATUS, dwFlags, 0);
> =====>        hWnd = ::GetWindow(hWnd, GW_HWNDNEXT);
>     }
> }
> ------------------------
> 
> In hWnd is the handle of the window that was opened from the interpreter...

Bingo. That seems to be the problem I described earlier.  Accessing a 
window that was created in another thread requires the other thread to 
execute.  But your other thread is blocked in WaitForSingleObject so it 
will not execute.  You have apparently compounded the problem by 
creating a parent-child relationship between windows in multiple 
threads, which MFC is not desgigned to handle.

* Do not create windows in a thread that will be suspended.
* Do not access windows from a thread that did not create them.

The recommended practice is to put all windows in the main GUI thread. 
If another thread needs to update a window it must request the GUI 
thread to do it, typically via PostMessage to a window.  An example of 
this lock-free technique can be found in 
http://www.mvps.org/vcfaq/mfc/index.htm

-- 
Scott McPhillips [VC++ MVP]

0
Scott
7/10/2005 4:11:02 PM
The phrase "was opened by the interpreter" is suggestive of the problem. You must not
create any child window in a thread where the parent was created from another thread. If a
thread needs a window to be created, it should PostMessage a request to the main GUI
thread to create the window, and access that window solely and exclusively by using
PostMessage calls to send messages to that window from the thread. What you appear to have
is classic deadlock, and the only solution is redesign.
					joe

On Sun, 10 Jul 2005 11:27:58 +0200, TX <tx@tx> wrote:

>Scott McPhillips [MVP] wrote:
>> TX wrote:
>> 
>>> I have a problem with blocking of main thread:
>>>
>>> My application contains an interpreter and I need to write a debugger 
>>> for it.
>>>
>>> The mainframe creates a thread that is interpreting instructions. When 
>>> I need to break execution of instruction thread, I use
>>> WaitForSingleObject(m_WaitEventHandle, INFINITE);
>>> in the interpreter thread.
>>>
>>> Everything works fine until the window is opened from the interpreter. 
>>> Then the mainframe freezes.
>>>
>>> When I break execution in VC the call stack for interpreter thread shows:
>>>
>>> � NTDLL!
>>> � KERNEL32!
>>> � CDebugManager::CheckBreakpoints()
>>> � CInterpreterThread::Run()
>>> � _AfxThreadEntry()
>>> � _threadstartex()
>>> � KERNEL32!
>>>
>>> call stack for the mainframe:
>>> � CWinThread::Run()
>>> � CWinApp::Run()
>>> � AfxWinMain()
>>> � WinMain()
>>> � WinMainCRTStartup()
>>> � KERNEL32!
>>>
>>>
>>> The window opened from interpreter is descendant of CDialog and is 
>>> created by calling CDialog::Create(IDD_DIALOG_BASE)
>>>
>>> What can be wrong?
>>> Is it a way to find out why the main thread is blocking?
>>>
>>> Thanks for any help.
>> 
>> 
>> The main call stack does not look frozen: CWinThread::Run is the main 
>> message pump.  Assuming that you have installed the MFC source files, a 
>> double-click on the top line of the stack will show you where the main 
>> thread is executing.
>> 
>> Does your main thread attempt to access the dialog or dialog controls 
>> created in the second thread?  That would cause a deadlock if the second 
>> thread is in WaitForSingleObject.  The second thread cannot maintain a 
>> window while it is in WaitForSingleObject.  It is best to put all 
>> windows in the main thread.
>> 
>
>Now I break execution again and the call stack for main thread shows this:
>
>------------------------
>� USER32! 77e1392f()
>� USER32! 77e15709()
>� CFrameWnd::NotifyFloatingWindows()
>� CFrameWnd::OnActivate()
>� CWnd::OnWndMsg()
>� CWnd::WindowProc()
>� AfxCallWndProc()
>� AfxWndProc()
>� AfxWndProcBase()
>� USER32! 77e12e98()
>� USER32! 77e139a3()
>� USER32! 77e1395f()
>� NTDLL! 77fa032f()
>� CWinThread::PumpMessage()
>� CWinThread::Run()
>� CWinApp::Run()
>� AfxWinMain()
>� WinMain()
>� WinMainCRTStartup()
>� KERNEL32! 77e97d08()
>------------------------
>
>When I double-click on CFrameWnd::NotifyFloatingWindows(), the source of 
>WinFrm.cpp shows the line marked with =====>
>
>
>------------------------
>void CFrameWnd::NotifyFloatingWindows(DWORD dwFlags)
>{
>	ASSERT_VALID(this);
>	ASSERT(m_hWnd != NULL);
>
>	// get top level parent frame window first unless this is a child window
>	CFrameWnd* pParent = (GetStyle() & WS_CHILD) ? this : GetTopLevelFrame();
>	ASSERT(pParent != NULL);
>	if (dwFlags & (FS_DEACTIVATE|FS_ACTIVATE))
>	{
>		// update parent window activation state
>		BOOL bActivate = !(dwFlags & FS_DEACTIVATE);
>		BOOL bEnabled = pParent->IsWindowEnabled();
>
>		if (bActivate && bEnabled && pParent != this)
>		{
>			// Excel will try to Activate itself when it receives a
>			// WM_NCACTIVATE so we need to keep it from doing that here.
>			m_nFlags |= WF_KEEPMINIACTIVE;
>			pParent->SendMessage(WM_NCACTIVATE, TRUE);
>			m_nFlags &= ~WF_KEEPMINIACTIVE;
>		}
>		else
>		{
>			pParent->SendMessage(WM_NCACTIVATE, FALSE);
>		}
>	}
>
>	// then update the state of all floating windows owned by the parent
>	HWND hWnd = ::GetWindow(::GetDesktopWindow(), GW_CHILD);
>	while (hWnd != NULL)
>	{
>		if (AfxIsDescendant(pParent->m_hWnd, hWnd))
>			::SendMessage(hWnd, WM_FLOATSTATUS, dwFlags, 0);
>=====>		hWnd = ::GetWindow(hWnd, GW_HWNDNEXT);
>	}
>}
>------------------------
>
>In hWnd is the handle of the window that was opened from the interpreter...

Joseph M. Newcomer [MVP]
email: newcomer@flounder.com
Web: http://www.flounder.com
MVP Tips: http://www.flounder.com/mvp_tips.htm
0
newcomer (15972)
7/10/2005 6:04:56 PM
Reply:

Similar Artilces:

encoding problem in Outlook 2007 importing Outlook 2000 personal folders
I use Outlook 2007 to import the pst file of Outlook 2000. The Chinese characters in the subject became unreadable but it's ok to display in message body. In Outlook 2000, there's no problem to display the Chinese characters in the subject. What's wrong with Outlook 2007? What setttings should I change to fix the problem? Thanks. cyl <u8526505@gmail.com> wrote: > I use Outlook 2007 to import the pst file of Outlook 2000. The Chinese > characters in the subject became unreadable but it's ok to display in > message body. In Outlook 2000, there's no problem t...

Problem shortcuts in Word
Hello, I work with Word 2008. In the beginning there is no problem, but suddenly i have problem with shortcuts. When i want to do "cmd c" it make an other shortcuts same thing for "cmd s", "cmd v" and surly some other. But when i write there is no problem "c" is "c"... If somebody have an idea please help me. Thank you. Unless you indicate your specific update level of Office as well as OS X & describe what the keystrokes *are* doing contrary to what you expect there isn't much we can offer. -- Regards |:>)...

Outlook 2003 PST problems
I just installed Office 2003 professional on a new computer & am having problems with outlook. I copied my Outlook.pst file into the appropriate directory & although it is recognized the calendar is not working properly. I cannot attach any of the colored labels to my appointments - so everything is pretty much in black & white. I totally uninstalled & reinstalled office... first removing my pst file... but there appears to be an ini file... or something that is retaining some information... does anyone know of a fix for the labels... or how to TOTALLY uninstall office (so I...

Problem with Authentication
The CRM application was running smooth. But now I can't logging. It ask my credentials and than return a 401.1 error. I had already reinstalled the CRM server but it won't work. I'm accessing it in the same local network. I'm running CRM 3.0 in SBS. Best regards, Erico Hi When you open a Internet explorer and type the name of the CRM server, it prompts for user and password ? Are you logged in with domain credentials ( AD user ) ? If you are, so add url of the crm server in Local intranet. Enable "Automatic logon only in intranet", this is under security,c...

Vista blue screen problem...please help!
I've seen some other threads, here are the dump files: 'RapidShare: 1-CLICK Web hosting - Easy Filehosting' (http://rapidshare.com/files/347103149/Minidump.rar.html) Please, help me out here. -- ceVil It might be better to know at what point the bsod occurs and what the actual err.msg given is "ceVil" <guest@unknown-email.com> wrote in message news:0b9a0c60b90bf6c0be88bda30f2820ab@nntp-gateway.com... > > I've seen some other threads, here are the dump files: > 'RapidShare: 1-CLICK Web hosting - Easy Filehosting' > (...

calendar problem
Dear all, I am using both mail and calendar function in outlook 2002. Everything is ok until recently, when I try to make a new appointment or checking any old appointments, an error message "out of memory or resource, try to close some windows..." pop up. The mail function is still ok. Can anyone tell me how can I solve this? I have already installed sp2. The version of office is the professional one with frontpage. Thanks. tp ...

problem #4
Hi, I am facing this new problem... i.e a user has installed Office 2003 on win2k prof platform.. whenever she is working on a outlook.. she gets a Microsoft error message... saying to send the report or don't send the report... Usually I have seen this problem in IE... But for outlook it is new to me... after clicking on send or don't send report.. the outlook closes. And there are no IE open..... and if atall it is open.. the IE does not close... Need your help regards, KAH What is logged to the Event Viewer regarding this? Try one of the following already; http://www.howt...

Block (or Hide) Control Panel
Hey There, I've been trying to see if there is a way to programmatically block, or hide, the Control Panel. Since it is a "Virtual Folder", just blocking an .exe from running doesn't work. Even some of the applet items in the Control Panel are problematic. The "Fonts" link or the "Network Connections" link are both "Virtual Folders", so when I block ..cpl files doesn't affect them. Anybody out there have any suggestions? Thanks! Jay (patelj27b at gmail dot com) > I've been trying to see if there is a way to programmatically ...

95 and 97 problem
For some unknown reason there is Excel 95 and 97 on this pc.When i double click on an Excel file, the pc defaults to the 95 program (Which incidently doesn't work properly). So my question is how do i get the pc to default to 97. Cheers Craig Craig, Have a look at Windows Help. From Windows 2000 Help (Index under Programs Associating with File Types) To change which program starts when you open a file In My Computer or Windows Explorer, on the View menu, click Folder Options. Click the File Types tab. In the list of file types, click the one you want to change. Click Edit. In Act...

sync problems
I have all of my info on an HP Ipac. I had to reformat the hard drive and I did not make a back-up file. I am trying to move everything back to the computer but it says there is an error with syncing it. How can I move everything from the PDA back to Outlook again? Please help- thanks ...

Date problem
I can't believe there's no post on this, but I can't find it. I've tried the solutions I could find (see below) and still get the error: "The expression is typed incorrectly or it is too complex to be evaluated. For example....Try simplifying...." I have a date field, formatted as Date/Time, General Date, default Value = Now(). I like having the date and the time - in case we need it. I want to run a report on calls taken just for one day. I have CallDate: CallDateAndTime in my query, with "criteria" as Between ([Forms]![frmReports]![txtStartDate]) A...

Installation Problem!!
I am having a problem installing MSCRM 1.2. My configuration consists of a Domain Controller running Win 2000 Server SP4 . I am trying to install MSCRM on a member of the domain running Windows 2000 Server SP4. There is a DNS Server on the DC which is integrated with AD, and a SQL Server 2000 running on the Win 2K machine. The install errors out when CRM creates the root business with the message: Setup was unable to install Microsoft CRM Server. Setup was unable to provision your organization. Setup was unable to create the root business. The configuration of ASP.NET seems to be ok, the pr...

Office 2007 - HELP
I have used Word for many years and love it - not too thrilled with the changes in Office 2007, but my bigger issue is with Publisher 2007. I have an image that I have used in Word just fine - meaning, the on screen colors are correct and when printed the colors are correct. Someone sent me a Publisher file and asked me to add the image - I did this - now the image is messed up - the colors are correct on screen, but when printed FROM MY computer the image colors are all wrong - but if I transport the file to a different computer it prints fine I have reinstalled Office - no good Any id...

Resource editor problems
Hello all, Under VC++ 7.1... Please consider these two lines: IDC_ARROW_ADD_CANCEL DISCARDABLE "res\\cur00004.cur" IDC_ARROW_ADD_CANCEL CURSOR DISCARDABLE "res\\cur00004.cur" The second is a hand-edited change to the first. Both will compile just fine in the resource compiler. However, after I use a text editor to make this change, I cannot open the .rc file in the resource editor. The resource editor issues the following error open attempting to open the .rc file: error RC2135 : file not found: CURSOR Can anyone shed light on what's going on here? Thanks, Dave ...

Directory Replication Problem #2
Hi, recently my Exchange Server directory database receives changes from other servers but does not send out its own changes. Check from the knowledge base, to correct the USN discrepancy need to use Authrest.exe (need to amke changes for about 100+ users). Does anybody know where to get this file 'Authrest.exe' for exchange server 5.5? Exchange server 5.5 CD only provide this file for ver.4.0. Have anyone use it before? Regards, "Sharon Tan" <sharon_tansk@yahoo.com.sg> wrote: >Hi, recently my Exchange Server directory database >receives changes from ot...

Problems Creating a disclaimer in Exchange 2003
I am trying to create a server based disclaimer that will stamp all of my smtp emails going to the internet. I have been following KB article 317680 with no luck. I get an error like the one below. Binding Display Name Specified: smtpscriptinghost ** Registration Failed ** Err.Number (HRESULT) = 0x1AD Err.Description = ActiveX component can't create object ProgID = cdo.ss_smtponarrival COM Category = {FF3CAA23-00B9-11d2-9DFB-00C04FA322BA} Corresponding Event = onarrival ** Have you registered your sink COM class on this machine? I am puttin...

Report printing block
Problem: I can't print reports. The "print report" button does not work. The print set up button will allow me to change set up for checks but will not pop up for "reports". I suspect that it is blocked by some popup blocker software that I installed and since uninstalled. I tried re-loading the 2003 Money software with no change in result. Does anybody know how to unblock a pop up menue. Or, is this not the problem. Please help. Thanks ...

User Defined Variables in MS query cause a problem to import data
If I use user defined variables in MS query to import data into excel sheet, the query executes but no data gets imported into the excel sheet. If I get rid of the variable the results can be imported into the Excel sheet. ...

Cell Format
I have a spreadsheet with cells that I'm trying to type the date into. I type in the date exactly like this: 09/26/03. When I hit "enter" MS Excel displays "37890" in the cell. No matter what I do I can't the cell to show: 09/26/03. I think that somehow I need to "strip" the cell of what it's original format is, but I can't figure out how. I try to use the Date option in the format cell screen but it doesn't work. Curtis I tried this and it didn't work. I also tried the "Text to columns" feature. No success. >...

outlook web access redirect problem
hi, I have been trying to redirect outlook web access (OWA) from the IIS root folder to the /exchange folder. I have followed the instructions on going into the web site and redirecting to a folder but I just get the following URL when I browse to the root of my webserver : http://webmail/exchange/exchange - it's like it's doubling up somehow. I have it set to : A redirection to a URL redirect to: /exchange client will be sent to: A directory below URL entered I just can't work it out... any ideas... cheers Baronne Which instructions did you follow? I wrote the below articl...

Problem after sorting
In my Excel 2007 workbook I have two sheets The "Master Names" sheet has columns: (A) First|(B) Last (C) First (B) Last (concatenated) The "Selected Names" sheet contains (A) cells which link to selected (C) First Last (concatenated) cells in the Master Names sheet. Everything links and displays fine except when I add names to the bottom of the Master Names sheet and then sort using (B) Last name column. When I do this I get a 0 (zero) in the (A) First Second cells in the Selected names sheet and other cells in this sheet have the wrong name. Obviously I am doin...

IF AND problem
Need to isolate problems on 1600 rows Worksheet Row Dept Hrs. Dollars A5 120500 600 9000 A6 120600 400 8000 A7 130600 240 A8 130400 160 A9 140600 320 6400 A10 140200 100 2000 A11 140600 240 (Found out the dept has 2 leading blanks) Isolate problems on 0600 criteria pointing out when b has value and c = 0. OK if both are 0. A7 and A11 should stand out.. =IF((MID(A1,5,4)="0600")=AND(b1>=0=AND(c1>=0)),"NO","ok") Does this work for you: =IF(RIGHT(A...

Problem SHAppBarMessage
Hi, I am creating an application bar which shall be displayed always at the top of the screen to show the user certain alerts. I am using the commands SHAppBarMessage(ABM_NEW, &abd); SHAppBarMessage(ABM_QUERYPOS, &abd); SHAppBarMessage(ABM_SETPOS, &abd); SetWindowPos(NULL, abd.rc.left, abd.rc.top, abd.rc.right - abd.rc.left, iClientHeight, SWP_NOACTIVATE); Works fine. The problem begins, when I start moving the taskbar. I am catching the event OnSettingChange and my application bar is resizing/moving correctly. BUT: If the taskbar moves to the top and my application bar ...

Lookup() problem
I set up two lists, 200 employees names and 200 employee numbers. A couple of the numbers match the correct names but the rest of the numbers all pull the same employee name. =LOOKUP(C4,List!C4:C204,List!B4:B204) The first time I tried it seemed to pull the correct matching names and numbers then kabui it gets stuck. I tried deleting the entire lists cells and all and starting over but same thing. Anyone ever run into this before? Wayman Don't forget! When using Lookup(), the vector (second argument) must be sorted in ascending order. If it's not, you'll get what you ca...

Problem creating credit card account
When creating a Chase or Amazon.com credit cards I am having this happen to me when it creates the card and I can't figure out how to fix it so there is just one card showing. I attached a jpeg of what I am seeing. It's like it created multiple instances of the card and also show balances of my other cards. I am not sure if it is because these cards are associated with Chase or what. When I had it setup the online service for the card then that is when it creates the other instances. I hope someone can makes sence of this. Thanks! ...