我对SQLite有一个很大的查询,我想在另一个线程中进行查询。此外,我想在另一个线程中更新ProgressBar。我只想说,我不明白怎么做,但是如果我创建std::thread t(func); t.join();
,我认为我的主线程不会继续运行。
我可以改为每帧更新发送一个SQL查询,但执行速度会更慢。
我有以下代码:
//....pseudo code
int main()
{
Game g;
g->run();
return 0;
}
//....code
class Game
{
private:
ProgressBar *m_bar; //have methods increase|decrease & draw for rendering
SQLClass *m_sql;
public:
void handleEvents();
void update()
{
if(/*when happened something*/)
{
m_sql->insertVeryBigQuery(); //20-30 seconds for writing
}
}
void render()
{
m_bar->draw();
}
void run()
{
while(1)
{
handleEvents();
update();
render();
}
}
}
答案 0 :(得分:2)
join()
表示您希望等待线程的结束。那不是你想要的。您希望它并行运行。删除连接并找到一种在线程完成时发出主循环信号的方法。