非同期のOpenWebPage()
機能を持つクラスを作成しました。 OpenWebPage(someUrl)
に電話すると、ハンドラが呼び出されます(OnPageLoad(reply)
)。私は、lastAction
というグローバル変数を使って、ページがロードされるとハンドラを扱いました。ハンドラはlastAction
をチェックし、適切な関数を呼び出します。例:非同期ネットワークコール
this->lastAction == "homepage";
this->OpenWebPage("http://www.hardwarebase.net");
void OnPageLoad(reply)
{
if(this->lastAction == "homepage")
{
this->lastAction = "login";
this->Login(); // POSTs a form and OnPageLoad gets called again
}
else if(this->lastAction == "login")
{
this->PostLogin(); // Checks did we log in properly, sets lastAction as new topic and goes to new topic URL
}
else if(this->lastAction == "new topic")
{
this->WriteTopic(); // Does some more stuff ... you get the point
}
}
ここでは、多数の「アクション」があるときを書き留めて把握するのが難しいです。ホームページ、ログイン、新しいトピック:
OpenWebPage("http://hardwarebase.net") // Stores the loaded page HTML in self.page
OpenWebpage("http://hardwarebase.net/login", {"user": username, "pw": password}) // POSTs a form
if(self.page == ...): // now do some more checks etc.
// do something more
が、今私がアクションを保持しているキュークラスを持っていることを想像:私は、Pythonで何かをしていた場合(同期)、それは次のように、はるかに簡単でした。非同期コールバックを介して、これらのすべてのアクション(適切な順番で1つずつ)をどのように実行する必要がありますか?最初の例は明らかに完全にハードコードされています。
率直に言って、私はこれが今まで書かれた最悪の問題である恐れているので、私は、あなたが私の質問を理解してほしい:X
P.S.これはすべてQtで行われます。
に操作のコンテキストを添付うん、ええと、それは問題ではない、私が書いていました実際のアプリケーションでは "else if"がありました。 – Ahmed