Results 1 to 6 of 6

Thread: Multiple QNetworkRequest slows the GUI performance

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Join Date
    Aug 2017
    Posts
    8
    Thanks
    9
    Qt products
    Qt4
    Platforms
    Windows

    Default Multiple QNetworkRequest slows the GUI performance

    Hello,
    I am writing an application and I am requesting RestApi for multiple data via different URLs.
    From the Mainwindow, I set a timer and call the functions for every one second. I have many functions like getData and I get the reply properly. But the response time is slow and the application itself is slow now. Even clicked on GUI Menu response time is slow. Am I doing anything wrong here?


    Qt Code:
    1. //In MainWindow.cpp
    2. void MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),UI(new Ui::MainWindow)
    3. {
    4. ui->setupUi(this);
    5. Api *ap = new Api(this);
    6. }
    7. void MainWindow::updateValues()
    8. {
    9. QTimer* timer=new QTimer(this);
    10. connect(timer, SIGNAL(timeout()), this, SLOT(findUpdate()));
    11. timer->start(1000);
    12. }
    13. //I call multiple functions from api
    14. void MainWindow::findUpdate()
    15. {
    16.  
    17. api->getData(url);
    18. api->getData1(url);
    19. }
    20.  
    21. //In api.h file QNetworkAcessManager manager;
    22. //In api.cpp
    23. void Api::getData(QString url)
    24. {
    25. QNetworkRequest request(QUrl(url));
    26. QNetworkReply *reply = manager.get(request);
    27. connect(reply,SIGNAL(finished()),this,SLOT(replydata()));
    28. }
    29. void Api::replyData()
    30. {
    31. QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender());
    32. if(reply)
    33. {
    34. QString response = (QString)reply.realAll();
    35. QJsonDocument json = QJsonDocument::fromJson(response.toUtf8());
    36. list = json.array();
    37. delete reply;
    38. }
    39. else
    40. {
    41. qDebug() << "Failure" << reply->errorString();
    42. delete reply;
    43. }
    44. emit listOfValues(list);
    45. }
    46.  
    47. void Api::getData1(QString url)
    48. {
    49. QNetworkRequest request(QUrl(url));
    50. QNetworkReply *reply = manager.get(request);
    51. connect(reply,SIGNAL(finished()),this,SLOT(replydata1()));
    52. }
    53. void Api::replyData1()
    54. {
    55. QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender());
    56. if(reply)
    57. {
    58. QString response = (QString)reply.realAll();
    59. QJsonDocument json = QJsonDocument::fromJson(response.toUtf8());
    60. list = json.object();
    61. delete reply;
    62. }
    63. else
    64. {
    65. qDebug() << "Failure" << reply->errorString();
    66. delete reply;
    67. }
    68. emit listOfValues(list);
    69. }
    To copy to clipboard, switch view to plain text mode 
    d

    Thanks in advance,
    Deepikha
    Last edited by deepikha; 20th October 2020 at 11:55.

  2. #2
    Join Date
    Jan 2008
    Location
    Alameda, CA, USA
    Posts
    5,230
    Thanks
    302
    Thanked 864 Times in 851 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Multiple QNetworkRequest slows the GUI performance

    From the Mainwindow, I set a timer and call the functions for every one second. ... But the response time is slow
    Why are you -polling- for new data every second? Sounds like you are bombarding the URLs with requests for updates before they have time to finish with the previous ones. So requests keep stacking up and you probably keep receiving the same data every second. Is there actually new data available once per second from every URL?

    I think you should make a bit of a redesign. Instead of polling all URLs every second, you should ask for data, wait until you receive the reply, then wait another second before asking again. Something like this:

    Qt Code:
    1. For each URL:
    2. - create the request in the getData() slot
    3. - connect the finished() signal to your replyData() slot
    4. - in replyData(), retrieve the reply
    5. - if the loop should keep running, then:
    6. - create a one-shot QTimer with a 1 second timeout
    7. - connect the timer's timeout() signal to the getData slot()
    8. - otherwise, do nothing and the loop exits
    To copy to clipboard, switch view to plain text mode 

    Pay attention to the For each URL above. Because every server might take a different amount of time to reply, you have to treat each server independently. You can't use the same QTimer for all of them, you need a separate timer for each one, and that timer can only be started after the server has finished giving you the reply to the last request you sent.

    It would be even better if there was a way to ask your servers if they have new data and only then go get it. If there is such a mechanism, then you can probably get rid of timers completely. In this case, you have two requests and two finished slots for each URL: first make the "is new data ready" request. That request will "hang" until the server returns its finished signal, at which point you can send the request for data. Instead of starting a QTimer at that point, you just ask to be notified when the data has changed again. With that mechanism, you are only asking for data when the server actually has something new to give you, not every second whether the data has changed or not.
    <=== The Great Pumpkin says ===>
    Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.

  3. #3
    Join Date
    Aug 2017
    Posts
    8
    Thanks
    9
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Multiple QNetworkRequest slows the GUI performance

    Thank you for the reply. In my application I have multiple LEDs(144) and Plots(44). These LEDs and Plots should be update every one second. Plot data will be updated every second in the server. LED status should also be updated every one second to get the status of the application running on server, So I used single QTimer to trigger every second. Currently LEDs and Plots are getting updated in the GUI every 4 to 5 seconds. Clicking on the Menus on GUI will take around 7 seconds to open the menu.

    One getData will give 3 LEDs value and for few getData1() will give 5 LEDs value.
    Structure of my Application
    I have 3 Classes
    each class has LEDs and Plots
    each class will call updateLED() and updatePlots() every second via QTimer in the Mainwindow


    Qt Code:
    1. //In Mainwindow
    2. void MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),UI(new Ui::MainWindow)
    3. {
    4. ui->setupUi(this);
    5. Api *api = new Api(this);
    6. Class1 *one = new Class1(this);
    7. Class2 *two = new Class2(this);
    8. Class3 *three = new Class3(this);
    9. QTimer* timer = new QTimer(this);
    10. connect(timer, SIGNAL(timeout()), this, SLOT(findUpdate()));
    11. timer->start(1000);
    12. }
    13.  
    14. void MainWindow::findUpdate()
    15. {
    16. QStringList listone = listOfdevice1;
    17. QStringList listtwo = listOfdevice2;
    18. QStringList listthree = listOfdevice3;
    19.  
    20. for(int i = 0; i < listone.size(); i++)
    21. {
    22. one->update(i);
    23. one->updateLED(i);
    24. }
    25.  
    26. for(int i = 0; i < listtwo.size(); i++)
    27. {
    28. two->updatePlot(i);
    29. two->updateLED(i);
    30. }
    31.  
    32. for(int i = 0; i < listthree.size(); i++)
    33. {
    34. three->updatePlot(i);
    35. three->updateLED(i);
    36. }
    37. }
    38.  
    39. //In ClassOne
    40. void ClassOne::update()
    41. {
    42. updatePlot();
    43. updateLED();
    44. }
    45.  
    46. void ClassOne::updatePlot()
    47. {
    48. api->getDataplotOne(url);
    49. connect(api,&Api::getDataPlotReplyOne,this,&ClassOne::updatePlotValue);
    50. }
    51.  
    52. void ClassOne::updateLED()
    53. {
    54. api->getDataLEDOne(url);
    55. connect(api,&Api::getDataLEDOneReply,this,&ClassOne::updateLEDValue);
    56. }
    57.  
    58. //In ClassTwo
    59. void ClassTwo::update()
    60. {
    61. updatePlot();
    62. updateLED();
    63. }
    64.  
    65. void ClassTwo::updatePlot()
    66. {
    67. api->getDataplotTwo(url);
    68. connect(api,&Api::getDataPlotTwoReply,this,&ClassTwo::updatePlotValue);
    69. }
    70.  
    71. void ClassTwo::updateLED()
    72. {
    73. api->getDataLEDTwo(url);
    74. connect(api,&Api::getDataLEDTwoReply,this,&ClassTwo::updateLEDValue);
    75. }
    76.  
    77. void ClassThree::update()
    78. {
    79. updatePlot();
    80. updateLED();
    81. }
    82.  
    83. void ClassThree::updatePlot()
    84. {
    85. api->getDataplotThree(url);
    86. connect(api,&Api::getDataPlotThreeReply,this,&ClassThree::updatePlotValue);
    87. }
    88.  
    89.  
    90.  
    91. void ClassThree::updateLED()
    92. {
    93. api->getDataLEDThree(url);
    94. connect(api,&Api::getDataLEDThreeReply,this,&ClassThree::updateLEDValue);
    95. }
    96.  
    97. // In Api Class
    98. void Api::getDataPlotOne(QString url)
    99. {
    100. QNetworkRequest request(QUrl(url));
    101. QNetworkReply *reply = manager.get(request);
    102. connect(reply,SIGNAL(finished()),this,SLOT(replydata1plot));
    103. }
    104. void Api::replyData1plot()
    105. {
    106. QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender());
    107. if(reply)
    108. {
    109. QString response = (QString)reply.realAll();
    110. QJsonDocument json = QJsonDocument::fromJson(response.toUtf8());
    111. list = json.object();
    112. delete reply;
    113. }
    114. else
    115. {
    116. qDebug() << "Failure" << reply->errorString();
    117. delete reply;
    118. }
    119. emit getDataPlotReplyOne(list);
    120. }
    121.  
    122. void Api::getDataLEDTwo(QString url)
    123. {
    124. QNetworkRequest request(QUrl(url));
    125. QNetworkReply *reply = manager.get(request);
    126. connect(reply,SIGNAL(finished()),this,SLOT(replydata2led));
    127. }
    128. void Api::replyData1led()
    129. {
    130. QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender());
    131. if(reply)
    132. {
    133. QString response = (QString)reply.realAll();
    134. QJsonDocument json = QJsonDocument::fromJson(response.toUtf8());
    135. list = json.object();
    136. delete reply;
    137. }
    138. else
    139. {
    140. qDebug() << "Failure" << reply->errorString();
    141. delete reply;
    142. }
    143. emit getDataLEDReplyTwo(list);
    144. }
    145.  
    146. void Api::replyData2plot()
    147. {
    148. QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender());
    149. if(reply)
    150. {
    151. QString response = (QString)reply.realAll();
    152. QJsonDocument json = QJsonDocument::fromJson(response.toUtf8());
    153. list = json.object();
    154. delete reply;
    155. }
    156. else
    157. {
    158. qDebug() << "Failure" << reply->errorString();
    159. delete reply;
    160. }
    161. emit getDataPlotReplyTwo(list);
    162. }
    163.  
    164. void Api::getDataLEDTwo(QString url)
    165. {
    166. QNetworkRequest request(QUrl(url));
    167. QNetworkReply *reply = manager.get(request);
    168. connect(reply,SIGNAL(finished()),this,SLOT(replydata2led));
    169. }
    170. void Api::replyData2led()
    171. {
    172. QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender());
    173. if(reply)
    174. {
    175. QString response = (QString)reply.realAll();
    176. QJsonDocument json = QJsonDocument::fromJson(response.toUtf8());
    177. list = json.object();
    178. delete reply;
    179. }
    180. else
    181. {
    182. qDebug() << "Failure" << reply->errorString();
    183. delete reply;
    184. }
    185. emit getDataLEDReplyTwo(list);
    186. }
    187.  
    188. //As per your suggestion I need to use multiple QTimer.
    189. QTimer* timerOnePlot=new QTimer(this);
    190. connect(timerOnePlot, SIGNAL(timeout()), this, SLOT(findUpdateOnePlot()));
    To copy to clipboard, switch view to plain text mode 
    //Now can you help me with a solution which wont effect my performance.

    Thank you,
    Deepikha

  4. #4
    Join Date
    Jan 2008
    Location
    Alameda, CA, USA
    Posts
    5,230
    Thanks
    302
    Thanked 864 Times in 851 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Multiple QNetworkRequest slows the GUI performance

    //Now can you help me with a solution which wont effect my performance.
    I gave you one. Read my post again. You cannot poll every LED every second if it takes more than one second for the LED to respond. You have to treat every LED (or group of LEDs) independently:

    - Ask the LED group for its data
    - Wait for the finished() signal
    - Get the data and tell the plot to update
    - Wait one second (for that LED group only)
    - Repeat

    What is the point of setting a performance goal (one second updates of everything) when your hardware cannot perform at that rate? Asking for data more often won't make it come in any faster.
    Last edited by d_stranz; 22nd October 2020 at 18:33.
    <=== The Great Pumpkin says ===>
    Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.

  5. The following user says thank you to d_stranz for this useful post:

    deepikha (23rd October 2020)

  6. #5
    Join Date
    Aug 2017
    Posts
    8
    Thanks
    9
    Qt products
    Qt4
    Platforms
    Windows

    Default Re: Multiple QNetworkRequest slows the GUI performance

    Quote Originally Posted by d_stranz View Post
    I gave you one. Read my post again. You cannot poll every LED every second if it takes more than one second for the LED to respond. You have to treat every LED (or group of LEDs) independently:

    - Ask the LED group for its data
    - Wait for the finished() signal
    - Get the data and tell the plot to update
    - Wait one second (for that LED group only)
    - Repeat

    What is the point of setting a performance goal (one second updates of everything) when your hardware cannot perform at that rate? Asking for data more often won't make it come in any faster.
    Ok, I should send the next QNetworkRequest after I get a reply to the first request.

    I have a single timer that will trigger the function findUpdate() every second in mainwindow. I have set an If condition, which will be set to 0 only when the reply is received. So is this efficient? Now my GUI performance is better but there is some response delay after 10mins. what would e the reason for the delay now?

    Qt Code:
    1. //In Mainwindow
    2. void MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),UI(new Ui::MainWindow)
    3. {
    4. ui->setupUi(this);
    5. Api *api = new Api(this);
    6. Class1 *one = new Class1(this);
    7. Class2 *two = new Class2(this);
    8. Class3 *three = new Class3(this);
    9. QTimer* timer = new QTimer(this);
    10. connect(timer, SIGNAL(timeout()), this, SLOT(findUpdate()));
    11. timer->start(1000);
    12. }
    13.  
    14. void MainWindow::findUpdate()
    15. {
    16. QStringList listone = listOfdevice1;
    17. QStringList listtwo = listOfdevice2;
    18. QStringList listthree = listOfdevice3;
    19.  
    20. for(int i = 0; i < listone.size(); i++)
    21. {
    22. one->update(i);
    23. }
    24.  
    25. for(int i = 0; i < listtwo.size(); i++)
    26. {
    27. two->update(i);
    28. }
    29.  
    30. for(int i = 0; i < listthree.size(); i++)
    31. {
    32. three->update(i);
    33. }
    34. }
    35.  
    36. //In ClassOne
    37. void ClassOne::update()
    38. {
    39. if(updatePlotFinished==0)
    40. {
    41. updatePlot();
    42. updatePlotFinished = 1;
    43. }
    44.  
    45. if(updateLEDFinished==0)
    46. {
    47. updateLED();
    48. updateLEDFinished = 1;
    49. }
    50. }
    51.  
    52. void ClassOne::updatePlot()
    53. {
    54. api->getDataplotOne(url);
    55. connect(api,&Api::getDataPlotReplyOne,this,&ClassOne::updatePlotValue);
    56. }
    57.  
    58. void ClassOne::updateLED()
    59. {
    60. api->getDataLEDOne(url);
    61. connect(api,&Api::getDataLEDOneReply,this,&ClassOne::updateLEDValue);
    62. }
    63.  
    64. void ClassOne::updatePlotValue(QJsonObject obj)
    65. {
    66. updatePlotFinished = 0;
    67. //updating plot
    68. }
    69.  
    70. void ClassOne::updateLEDValue(QJsonObject obj)
    71. {
    72. updateLEDFinished = 0;
    73. //Updating LED status
    74. }
    75.  
    76. //In ClassTwo
    77. void ClassTwo::update()
    78. {
    79. if(updatePlotFinished==0)
    80. {
    81. updatePlot();
    82. updatePlotFinished = 1;
    83. }
    84.  
    85. if(updateLEDFinished==0)
    86. {
    87. updateLED();
    88. updateLEDFinished = 1;
    89. }
    90. }
    91.  
    92. void ClassTwo::updatePlot()
    93. {
    94. api->getDataplotTwo(url);
    95. connect(api,&Api::getDataPlotTwoReply,this,&ClassTwo::updatePlotValue);
    96. }
    97.  
    98. void ClassTwo::updateLED()
    99. {
    100. api->getDataLEDTwo(url);
    101. connect(api,&Api::getDataLEDTwoReply,this,&ClassTwo::updateLEDValue);
    102. }
    103.  
    104.  
    105. void ClassTwo::updatePlotValue(QJsonObject obj)
    106. {
    107. updatePlotFinished = 0;
    108. //updating plot
    109. }
    110.  
    111. void ClassTwo::updateLEDValue(QJsonObject obj)
    112. {
    113. updateLEDFinished = 0;
    114. //Updating LED status
    115. }
    116. // In ClassThree
    117. void ClassThree::update()
    118. {
    119. if(updatePlotFinished==0)
    120. {
    121. updatePlot();
    122. updatePlotFinished = 1;
    123. }
    124.  
    125. if(updateLEDFinished==0)
    126. {
    127. updateLED();
    128. updateLEDFinished = 1;
    129. }
    130. }
    131.  
    132. void ClassThree::updatePlot()
    133. {
    134. api->getDataplotThree(url);
    135. connect(api,&Api::getDataPlotThreeReply,this,&ClassThree::updatePlotValue);
    136. }
    137.  
    138.  
    139.  
    140. void ClassThree::updateLED()
    141. {
    142. api->getDataLEDThree(url);
    143. connect(api,&Api::getDataLEDThreeReply,this,&ClassThree::updateLEDValue);
    144. }
    145.  
    146.  
    147. void ClassTwo::updatePlotValue(QJsonObject obj)
    148. {
    149. updatePlotFinished = 0;
    150. //updating plot
    151. }
    152.  
    153. void ClassTwo::updateLEDValue(QJsonObject obj)
    154. {
    155. updateLEDFinished = 0;
    156. //Updating LED status
    157. }
    158. // In Api Class
    159. void Api::getDataPlotOne(QString url)
    160. {
    161. QNetworkRequest request(QUrl(url));
    162. QNetworkReply *reply = manager.get(request);
    163. connect(reply,SIGNAL(finished()),this,SLOT(replydata1plot));
    164. }
    165. void Api::replyData1plot()
    166. {
    167. QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender());
    168. if(reply)
    169. {
    170. QString response = (QString)reply.realAll();
    171. QJsonDocument json = QJsonDocument::fromJson(response.toUtf8());
    172. list = json.object();
    173. delete reply;
    174. }
    175. else
    176. {
    177. qDebug() << "Failure" << reply->errorString();
    178. delete reply;
    179. }
    180. emit getDataPlotReplyOne(list);
    181. }
    182.  
    183. void Api::getDataLEDTwo(QString url)
    184. {
    185. QNetworkRequest request(QUrl(url));
    186. QNetworkReply *reply = manager.get(request);
    187. connect(reply,SIGNAL(finished()),this,SLOT(replydata2led));
    188. }
    189. void Api::replyData1led()
    190. {
    191. QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender());
    192. if(reply)
    193. {
    194. QString response = (QString)reply.realAll();
    195. QJsonDocument json = QJsonDocument::fromJson(response.toUtf8());
    196. list = json.object();
    197. delete reply;
    198. }
    199. else
    200. {
    201. qDebug() << "Failure" << reply->errorString();
    202. delete reply;
    203. }
    204. emit getDataLEDReplyTwo(list);
    205. }
    206.  
    207. void Api::replyData2plot()
    208. {
    209. QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender());
    210. if(reply)
    211. {
    212. QString response = (QString)reply.realAll();
    213. QJsonDocument json = QJsonDocument::fromJson(response.toUtf8());
    214. list = json.object();
    215. delete reply;
    216. }
    217. else
    218. {
    219. qDebug() << "Failure" << reply->errorString();
    220. delete reply;
    221. }
    222. emit getDataPlotReplyTwo(list);
    223. }
    224.  
    225. void Api::getDataLEDTwo(QString url)
    226. {
    227. QNetworkRequest request(QUrl(url));
    228. QNetworkReply *reply = manager.get(request);
    229. connect(reply,SIGNAL(finished()),this,SLOT(replydata2led));
    230. }
    231. void Api::replyData2led()
    232. {
    233. QNetworkReply *reply = qobject_cast<QNetworkReply*>(QObject::sender());
    234. if(reply)
    235. {
    236. QString response = (QString)reply.realAll();
    237. QJsonDocument json = QJsonDocument::fromJson(response.toUtf8());
    238. list = json.object();
    239. delete reply;
    240. }
    241. else
    242. {
    243. qDebug() << "Failure" << reply->errorString();
    244. delete reply;
    245. }
    246. emit getDataLEDReplyTwo(list);
    247. }
    To copy to clipboard, switch view to plain text mode 

  7. #6
    Join Date
    Jan 2008
    Location
    Alameda, CA, USA
    Posts
    5,230
    Thanks
    302
    Thanked 864 Times in 851 Posts
    Qt products
    Qt5
    Platforms
    Windows

    Default Re: Multiple QNetworkRequest slows the GUI performance

    I have a single timer that will trigger the function findUpdate() every second in mainwindow. I have set an If condition, which will be set to 0 only when the reply is received. So is this efficient?
    No. Since you see your program gradually start to slow down, this probably means that server requests are backing up. More slowly than before, but your code is probably still making requests faster than they can be answered.

    And how can you have -one- flag that applies to -all- servers? If you set it to 0 when -any- reply is received from -any- server, what about all of the other servers who have not replied yet? If -any- server can set the flag to zero, then when your timer fires it will ask -all- of them for an update even if some have still not replied. Your findUpdate() rate will be set by the -fastest- server, not the slowest, and so requests to the slow servers will back up.

    Why are you so resistant to getting rid of the 1-second QTimer? It is the cause of the slowdown. Get rid of it. Your servers cannot all keep up with a 1-second request rate. If someone has specified that your program must update every second, you need to point out to them that this cannot be done.

    What you can do is to get rid of QTimers completely. In the algorithm I posted:

    - Ask the LED group for its data
    - Wait for the finished() signal
    - Get the data and tell the plot to update
    - Wait one second (for that LED group only)
    - Repeat

    Remove the "Wait one second" line and immediately ask the same LED group again for an update. If you do this for every LED group independently it means that your UI will receive updates at the fastest rate possible - as fast as each LED group is capable of responding. You cannot make it work any faster than this unless you make the servers faster.

    Your program should be completely asynchronous - you can't force each LED group to respond at the same rate, and should not try. The Qt way is to ask for something and let Qt tell when it is ready. If each LED group answers at a different rate, well that's just the reality of the situation and you can't force it to run faster. If you are on a bicycle, you aren't going to make it as fast as a car no matter how hard you pedal.

    Edit:


    If you still insist on using a QTimer in MainWindow, then you can make your findUpdate method work if you do this:

    - create a vector of flags, one entry in the vector for each server.
    - initialize the vector to zero for every entry

    In findUpdate():
    - look at the entries in the vector
    - for any zero entry, issue the get request to that server and set the flag for that server to 1

    In the finished() slot
    - when you receive the data for that server's request, set its flag to 0

    In findUpdate(), if any flags are set to zero, then you can issue a get request for those servers only. Any flags still set to 1 mean the request is still waiting, so you can't issue another one.

    This way, you can update the UI once per second with whatever new information has come in during the last second, but there will not be new information for every server. (And in the algorithm I posted above, you will also get rid of the "Repeat" line. Each server will now be under the control of findUpdate and will be asked for new data at most once per second. The slowest server will still be slow.)
    Last edited by d_stranz; 26th October 2020 at 20:35.
    <=== The Great Pumpkin says ===>
    Please use CODE tags when posting source code so it is more readable. Click "Go Advanced" and then the "#" icon to insert the tags. Paste your code between them.

  8. The following user says thank you to d_stranz for this useful post:

    deepikha (2nd November 2020)

Similar Threads

  1. Performance issues with multiple visible Windows
    By Zmote89 in forum Qt Programming
    Replies: 4
    Last Post: 4th May 2017, 20:20
  2. Multiple QGLWidgets performance issue
    By louissmr in forum Qt Programming
    Replies: 0
    Last Post: 18th July 2013, 09:28
  3. Multiple QGLWidgets slow performance
    By seesomi in forum Qt Programming
    Replies: 1
    Last Post: 15th February 2013, 10:20
  4. Replies: 1
    Last Post: 14th April 2011, 16:21
  5. rendering svg using QGraphicsSVGItem slows doen the performance
    By sanjayshelke in forum Qt Programming
    Replies: 4
    Last Post: 1st September 2009, 07:52

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Digia, Qt and their respective logos are trademarks of Digia Plc in Finland and/or other countries worldwide.