Solved

Who knows USB driver in WinCE?

Posted on 2000-03-09
4
226 Views
Last Modified: 2013-12-27
Hello,

I am converting the usbmouse.dll into my own driver. When I study the codes, I can't understand the following codes.

In the init routine,

  m_hThread = CreateThread(0, 0, MouseThreadStub, this, 0, NULL);


ULONG CALLBACK CD12::MouseThreadStub(PVOID context)
{
    CD12 * pMouse = (CD12 *)context;
    return(pMouse->MouseThread());
}

And it will call the MouseThread routine. My question is,
why doesn't it call MouseThread directly in CreateThread? Instead, it call a stub routine, in this routine, it invoke the MouseThread?


If I don't make it clear, Let me know
Thanks
zouying
0
Comment
Question by:zouying
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
4 Comments
 

Expert Comment

by:CharlesDHManning
ID: 2614922
This is a common thing to have to do with asynchronous processing in C++. The same thing happens with interrupt service routines.

In C++, the code is executed in the context of the current object (*this). But what happens when an asynchronous execution (eg. independent thread or interrupt service routine) happens? There is no way to know which object is being referred to.

When an interrupt occurs, all the system can do is call a function. If the code is in C++, then the function must call the method of the appropriate object. That's the purtpose od the stub.

ie.

stubfunction()
{
  objectPtr->InterruptMethod();
}


As you can see, the CreateThread function passes this in to the function. this is a pointer to the calling object.

The tub function runs and invokes the appropriate method on the object, thus performing the tie up.

0
 

Author Comment

by:zouying
ID: 2615186
Why don't they put the MouseStub and MouseThread together?

What you explains is: (I can understand so much: ), by the time the MouseStub is invoked, it may not be in the current context, so, we pass a this parameters? But this doesn't fix my above question?


is it?
Zouying
0
 

Accepted Solution

by:
CharlesDHManning earned 100 total points
ID: 2617372
I stand by my answer.

When you start a thread, it is not in the context of the current object (because it is independent execution).

You can't just call a method of an object without specifying the object (iether implicitely or explicitely) becuase the system needs to know which object you are manipulating. Imagine there were a hundred of these objects which object are you refering to?

When MouseThread runs it needs to be within the context of an object of type CD12 (ie. it needs to be called as follows).

  CD12Pointer->MouseThread()

The mechanism above does this. The CreateThead starts  When the thread is created, it starts MouseThreadStub and provides a parameter "this". "this" is the current object.

MouseThreadStub then effectively calls
  this->MouseThread();

Now MouseThread knows what object you are refering to.

You can do this because MouseThreadStub is a static method of the class. It does not run in the context of an object.





0
 

Expert Comment

by:CharlesDHManning
ID: 2621197
Does my answer clarify things?
0

Featured Post

Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Android dim off 2 93
ios, android app to print to pdf 3 45
how to get hot spot in park or remote places or on vacation 9 67
location of pointed at object 4 128
I think the most popular question in our Windows Mobile Programming zone is about the backlight - we all want to keep it on when our application is running. Few years ago the function SystemIdleTimerReset() did this job. On our side we had to detec…
Preface: This article is part of a series focused on cross platform mobile app development (specifically Android and iOS) using the Alloy framework and Titanium Studio made by Appcelerator (https://www.appcelerator.com/). This article presumes a wor…
In a recent question (https://www.experts-exchange.com/questions/29004105/Run-AutoHotkey-script-directly-from-Notepad.html) here at Experts Exchange, a member asked how to run an AutoHotkey script (.AHK) directly from Notepad++ (aka NPP). This video…
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an antispam), the admini…

730 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question