History

TimeSeriesPlatformLibrary: Updated samples to control DataSubscriber lifetimes within main function to accommodate desired order-of-operations for standard function pointer destruction.

J. Ritchie Carroll committed 7 years ago

Commit 5bc9e1f1 parent b1a5c818 files · +66 −36Browse files

Showing the changes to Source/Libraries/TimeSeriesPlatformLibrary/Samples/AverageFrequencyCalculator.cpp (1 of 8 files). Show all

Unified · Split

Source/Libraries/TimeSeriesPlatformLibrary/Samples/AverageFrequencyCalculator.cpp+18−13
@@ -34,11 +34,11 @@ using namespace GSF; · 33 unmodified lines
34using namespace GSF::TimeSeries;34using namespace GSF::TimeSeries;
35using namespace GSF::TimeSeries::Transport;35using namespace GSF::TimeSeries::Transport;
36 36
37DataSubscriber Subscriber;37DataSubscriber* Subscriber;
38SubscriptionInfo Info;38SubscriptionInfo Info;
39 39
40// Create helper objects for subscription.40// Create helper objects for subscription.
41void SetupSubscriberConnector(SubscriberConnector& connector, string hostname, uint16_t port);41void SetupSubscriberConnector(SubscriberConnector& connector, const string& hostname, uint16_t port);
42SubscriptionInfo CreateSubscriptionInfo();42SubscriptionInfo CreateSubscriptionInfo();
43 43
44// Handlers for subscriber callbacks.44// Handlers for subscriber callbacks.
@@ -48,7 +48,7 @@ void DisplayStatusMessage(DataSubscriber* source, const string& message); · 3 unmodified lines
48void DisplayErrorMessage(DataSubscriber* source, const string& message);48void DisplayErrorMessage(DataSubscriber* source, const string& message);
49 49
50// Runs the subscriber.50// Runs the subscriber.
51void RunSubscriber(string hostname, uint16_t port);51void RunSubscriber(const string& hostname, uint16_t port);
52 52
53// Sample application to demonstrate average frequency calculation using the subscriber API.53// Sample application to demonstrate average frequency calculation using the subscriber API.
54int main(int argc, char* argv[])54int main(int argc, char* argv[])
@@ -69,6 +69,9 @@ int main(int argc, char* argv[]) · 14 unmodified lines
69 hostname = argv[1];69 hostname = argv[1];
70 stringstream(argv[2]) >> port;70 stringstream(argv[2]) >> port;
71 71
72 // Maintain the life-time of DataSubscriber within main
73 Subscriber = new DataSubscriber();
74
72 // Run the subscriber.75 // Run the subscriber.
73 RunSubscriber(hostname, port);76 RunSubscriber(hostname, port);
74 77
@@ -77,9 +80,11 @@ int main(int argc, char* argv[]) · 2 unmodified lines
77 getline(cin, line);80 getline(cin, line);
78 81
79 // Disconnect the subscriber to stop background threads.82 // Disconnect the subscriber to stop background threads.
80 Subscriber.Disconnect();83 Subscriber->Disconnect();
81 cout << "Disconnected." << endl;84 cout << "Disconnected." << endl;
82 85
86 delete Subscriber;
87
83 return 0;88 return 0;
84}89}
85 90
@@ -88,26 +93,26 @@ int main(int argc, char* argv[]) · 2 unmodified lines
88// - Register callbacks93// - Register callbacks
89// - Connect to publisher94// - Connect to publisher
90// - Subscribe95// - Subscribe
91void RunSubscriber(string hostname, uint16_t port)96void RunSubscriber(const string& hostname, uint16_t port)
92{97{
93 SubscriberConnector& connector = Subscriber.GetSubscriberConnector();98 SubscriberConnector& connector = Subscriber->GetSubscriberConnector();
94 99
95 // Set up helper objects100 // Set up helper objects
96 SetupSubscriberConnector(connector, hostname, port);101 SetupSubscriberConnector(connector, hostname, port);
97 Info = CreateSubscriptionInfo();102 Info = CreateSubscriptionInfo();
98 103
99 // Register callbacks104 // Register callbacks
100 Subscriber.RegisterStatusMessageCallback(&DisplayStatusMessage);105 Subscriber->RegisterStatusMessageCallback(&DisplayStatusMessage);
101 Subscriber.RegisterErrorMessageCallback(&DisplayErrorMessage);106 Subscriber->RegisterErrorMessageCallback(&DisplayErrorMessage);
102 Subscriber.RegisterNewMeasurementsCallback(&ProcessMeasurements);107 Subscriber->RegisterNewMeasurementsCallback(&ProcessMeasurements);
103 108
104 cout << endl << "Connecting to " << hostname << ":" << port << "..." << endl << endl;109 cout << endl << "Connecting to " << hostname << ":" << port << "..." << endl << endl;
105 110
106 // Connect and subscribe to publisher111 // Connect and subscribe to publisher
107 if (connector.Connect(Subscriber, Info))112 if (connector.Connect(*Subscriber, Info))
108 {113 {
109 cout << "Connected! Subscribing to data..." << endl << endl;114 cout << "Connected! Subscribing to data..." << endl << endl;
110 Subscriber.Subscribe();115 Subscriber->Subscribe();
111 }116 }
112 else117 else
113 {118 {
@@ -131,14 +136,14 @@ SubscriptionInfo CreateSubscriptionInfo() · 17 unmodified lines
131 info.UseLocalClockAsRealTime = false;136 info.UseLocalClockAsRealTime = false;
132 info.UseMillisecondResolution = true;137 info.UseMillisecondResolution = true;
133 138
134 // This controls the downsampling time, in seconds139 // This controls the down-sampling time, in seconds
135 info.Throttled = true;140 info.Throttled = true;
136 info.LagTime = 1.0;141 info.LagTime = 1.0;
137 142
138 return info;143 return info;
139}144}
140 145
141void SetupSubscriberConnector(SubscriberConnector& connector, string hostname, uint16_t port)146void SetupSubscriberConnector(SubscriberConnector& connector, const string& hostname, uint16_t port)
142{147{
143 // SubscriberConnector is another helper object which allows the148 // SubscriberConnector is another helper object which allows the
144 // user to modify settings for auto-reconnects and retry cycles.149 // user to modify settings for auto-reconnects and retry cycles.

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t