私のProducer
(別のスレッドで実行されているQDesktopWidget
)は、いくつかのQWidgetにアクセスする必要があり、 QPixmap
. だから私はこのようにポーリングを設計します。
Producer、Consumer、Transmitter はboost::thread
. これが私が計画した方法です。
私は、GUIスレッドに存在するdevice::Service
クラスを持っています。QObject
これは、すべてのサービス クラスのベースです。device::PixmapService
受け継ぐものがあるdevice::Service
Threadによって呼び出される、次のシグネチャを持つメソッドがありProducer
ます。ProxyTray<QImage, device::PixmapService> device::PixmapService::requestPixmap()
requestPixmap()
トレイProxyTray<QImage, device::PixmapService> blankTray
を作成して a を発行し、すぐthis->pixmapRequestedSignal(tray)
に同じものを返しますtray
。
device::PixmapService::pixmapRequestedSlot
Qt の Signal-Slot Mechanism でリクエストを取得します。によってトレイを解決しますtray.resolve(image)
。
その間、Producer はやって待っています。
while(!tray.released());
QImage image = tray.data();
デザインは大丈夫ですか?それはうまくいきますか?Wheel を再発明していますか?
template <typename T, typename Manipulator>
class ProxyTray: public AbstractProxyTray{
friend class Manipulator;
private:
T _data;
public:
ProxyTray();
public:
T& data() const;
~ProxyTray();
private:
void resolve(T& data);
};
class AbstractProxyTray{
private:
bool _busy;
public:
AbstractProxyTray();
public:
bool released() const;//returns !_busy
virtual ~AbstractProxyTray() = 0;
};
また、ProxyTray のコピー コンを作成する必要があります。コピーは問題ないはずです。なぜなら、トレイはQSharedData
which implementsに基づく Qt タイプを保持するからcopy on write
です。