问题
A very fundamental question. The documentation mentions that all methods in QNetworkAccessManager
are reentrant. If so, is performing a get()
method in a QRunnable
without locks legal? My code would look something like this:
class MyClass: public QRunnable
{
void run()
{
...
QNetworkAccessManager nam;
QNetworkReply* reply = name.get(request) // No Read-write lock.
...
}
};
回答1:
From the Qt documentation:
[...] a class is said to be reentrant if its member functions can [simultaneously] be called safely from multiple threads, as long as each thread uses a different instance of the class.
Since you're using a different instance each time (the one you create on the stack in run()
), you're on the safe side.
回答2:
As a side note to this ,if you just want the GET request to be asynchronous, QNetworkAccessManager
is already asynchronous (says so in the docs).
来源:https://stackoverflow.com/questions/5915771/qnetworkaccessmanager-from-threadpool