我遇到的问题是,我QThreads根据大量文章决定实施他们应该采用的方式:
http://blog.qt.digia.com/blog/2010/06/17/youre-doing-it-wrong/
http://mayaposch.wordpress.com/2011/11/01/how-to-really-truly-use-qthreads-the-full-explanation/
并且问题在于,因为算法是在单独的QObject(包装QThread)中运行的.我该怎么称呼Thread::Sleep或者说什么呢?任何想法?
该软件的一个小描述.基本上我的申请解决了TSP(旅行商问题).随着搜索的进行,它将历史中的所有状态保存为frames...(如可视框架).搜索算法将在一个线程上运行.主线程正在使用GUI进行处理.然后有Mediaplayer类似的线程告诉Main线程在屏幕上显示什么帧.那么睡眠在哪里?在gui中有一个滑块,用户可以使用它来快进或以正常速度前进.滑块通过信号槽告诉Mediaplayer线程更快或更慢.
在他的Qt事件循环,网络和I/O API谈话中,Thiago Macieira提到QEventLoop应该避免嵌套:
QEventLoop用于嵌套事件循环...如果可以的话,请避免使用它,因为它会产生许多问题:事情可能会重新进入,新的套接字或定时器激活是你没想到的.
任何人都可以扩展他指的是什么吗?我维护了许多使用模态对话框的代码,这些代码在exec()调用时在内部嵌套一个新的事件循环,因此我非常有兴趣知道这可能导致什么样的问题.
在C++/Qt程序中,我需要QProcess按顺序运行一些带有"完成"信号的异步任务(例如网络下载等),每个任务都在最后一次完成之后.
我能想到的唯一方法是为每个步骤设置一个单独的状态类(非常冗长,比如在同步程序中为每一行设置一个单独的类),或者让一个具有状态枚举的大类和字段来保存所有不同步骤所需的可能对象(不灵活,难以维护).对此有什么好的解决方案吗?它似乎应该是一个常见的问题,但我找不到任何东西.
Qt是否有一QIODevice对可用于进程内点对点通信的对?
人们可以使用的混凝土QTCPSocket或QLocalSocket,但服务器端连接API是有点麻烦,而且似乎浪费通过OS强制的数据.