当前我需要在PDA程序中通过HTTP协议访问WEB服务端获取数据,但发现QHttp这个提供的机制是异步的,但我们需同步的功能,在获取到服务端的数据后再进行一步的处理,于是我们这样写了程序:
QHttp* http = new QHttp();
connect(http, SIGNAL(requestFinished(int, bool)), this, SLOT(onRequestFinished(int, bool)));
http->setHost("...");
....
QBuffer buffer;
m_post_id = http->post(path, data, &buffer);
wait();
// wait()方法的实现
void wait()
{
m_finished_flag = false; // 这是一个成员变量,标示请求是否完成
while(!m_finished_flag )
{
QApplication::processEvent();
}
}
// QHttp requestFinished信号槽
void onRequestFinished(int requestID , bool)
{
if (requestID == m_post_id)
{
m_finished_flag = true;
}
}
大体是这样完成的,在PC机上这段程序可以完成同步服务,但到PDA就无法实现,在post发出请求后wait()方法就进行死循环了。
[ 此帖被cityfantom在2009-08-07 09:22重新编辑 ]