Hello I'm new to C++ and trying to handle an event raised by a managed class ServerApi::Request
The managed class is a COM interface that I have imported into my visual studio project using the "add reference" tool to select the ServerApi.dll file. All of the methods seem to be working as expected but the event handler onDataReady()
is never executed. Here is my code:
//Event receiver
ref class EventReceiver {
public:
void OnDataReady() {
cout << "dataReadyHandler called" << endl;
}
void AddHandlers(ServerApi::Request^ request) {
request->DataReady += gcnew DataReadyDelegate(this, &EventReceiver::OnDataReady);
}
void RemoveHandlers(ServerApi::Request^ request) {
request->DataReady -= gcnew DataReadyDelegate(this, &EventReceiver::OnDataReady);
}
};
void executeEventRequest() {
ServerApi::RequestManager^ requestManager = gcnew ServerApi::RequestManager();
ServerApi::Request^ request = requestManager->CreateMethod("...");
EventReceiver^ eventReceiver = gcnew EventReceiver();
eventReceiver->AddHandlers(request);
request->Execute();
eventReceiver->RemoveHandlers(request);
}
The request
object raises a DataReady
event after the Execute()
method is called on it. I know that the data is ready almost instantaneously from polling. What am I missing?
First Edit
This is how I originally waited after request->Execute()
is called:
EventReceiver^ eventReceiver = gcnew EventReceiver();
eventReceiver->AddHandlers(request);
request->Execute();
clock_t beginTime = clock();
// wait for 2 seconds
while(clock() < beginTime + 2000) {
// do nothing
}
eventReceiver->RemoveHandlers(request);
There is no blocking on the Execute method control is returned immediately.