Using HANDLE in different class & thread

D

Donos

Hi

I have a HANDLE to an Event, like this..

HANDLE h = ::CreateEvent(NULL, FALSE, FALSE, NULL);

This is running in one thread in one class. For example we will call
that class as "Class A"

Now i want to use this HANDLE in another thread in another class to
call SetEvent(h); This is "Class B"

I tried creating a pointer to Class A and using it, But it gets an
invalid HANDLE.

Any idea how this can be done?
 
V

Victor Bazarov

Donos said:
I have a HANDLE to an Event, like this..

HANDLE h = ::CreateEvent(NULL, FALSE, FALSE, NULL);

This is running in one thread in one class. For example we will call
that class as "Class A"

Now i want to use this HANDLE in another thread in another class to
call SetEvent(h); This is "Class B"

I tried creating a pointer to Class A and using it, But it gets an
invalid HANDLE.

Any idea how this can be done?

This is not a C++ language question. This is a Windows programming
question. Please ask Windows programming questions in the Windows
programming newsgroup.

V
 
S

Scott McPhillips [MVP]

Victor Bazarov said:
This is not a C++ language question. This is a Windows programming
question. Please ask Windows programming questions in the Windows
programming newsgroup.


V: It is a very fundamental C++ language question, even though it uses
Windows terms. The OP clearly needs help with C++ concepts.

Donos: The problem stems from a lack of understanding of the difference
between a class and an object of that class. This is best approached by
careful study of the first few chapters of any C++ book. Classes do not
store any data, only objects do that.

The handle is not stored in class A, it is stored in an object whose type is
class A. Creating a pointer to Class A elsewhere does not magically make it
point at the original A object. If object B wishes to access a member
variable of object A then object B must have a pointer (or reference) to the
original A object and this pointer must be initialized with the address of
the A object. Also notice that h must be a member variable, not the
automatic variable you show in your code.

class A {
public:
HANDLE h;
A::A() { h = CreateEvent(NULL, FALSE, FALSE, NULL);}
};

// some function in class B
A* a = new A();
HANDLE hcopy = a->h;
 
A

Andrew

Also, i think it's wrong to expose class internal HANDLE. That's
breaking encapsulation.
 
V

Victor Bazarov

Scott said:
V: It is a very fundamental C++ language question, even though it uses
Windows terms. The OP clearly needs help with C++ concepts.

Might be. As I read it, the question was similar to "I create an event
in thread 1, then I need to call SetEvent() for that event in thread 2,
how do I do it? How the hell is that a fundamental C++ question?
Donos: The problem stems from a lack of understanding of the
[..]

V
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,009
Latest member
GidgetGamb

Latest Threads

Top