当前位置: 首页 > news >正文

深圳网站制作公司价位苍南具城乡建设局网站

深圳网站制作公司价位,苍南具城乡建设局网站,seo 网站标题字数,网站建设公司商务网站项目书qt-C笔记之使用QtConcurrent异步地执行槽函数中的内容#xff0c;使其不阻塞主界面 code review! 文章目录 qt-C笔记之使用QtConcurrent异步地执行槽函数中的内容#xff0c;使其不阻塞主界面1.QtConcurrent::run基本用法基本用法启动一个全局函数或静态成员函数使用 Lambda…qt-C笔记之使用QtConcurrent异步地执行槽函数中的内容使其不阻塞主界面 code review! 文章目录 qt-C笔记之使用QtConcurrent异步地执行槽函数中的内容使其不阻塞主界面1.QtConcurrent::run基本用法基本用法启动一个全局函数或静态成员函数使用 Lambda 表达式启动类的成员函数 指定执行的线程使用返回值注意事项 2.代码1槽函数定义——QtConcurrent::run(Lambda表达式)——全局函数3.代码2槽函数定义——QtConcurrent::run(Lambda表达式)——全局函数4.代码3槽函数定义——QtConcurrent::run(this,类名::成员函数)5.代码4槽函数定义——QtConcurrent::run(Lambda表达式[this]{执行内容})6.上述例程的test.pro 1.QtConcurrent::run基本用法 QtConcurrent::run 是 Qt 框架中一个非常有用的函数用于在不同的线程中异步执行函数或者成员函数这样可以避免阻塞主线程提高应用程序的响应性。这个函数是 Qt 并发编程模块的一部分使用前需要包含头文件 QtConcurrent。 基本用法 QtConcurrent::run 可以启动任何可调用的对象包括普通函数、类成员函数以及 lambda 表达式。它返回一个 QFutureT 对象你可以使用这个对象来查询任务的状态或结果。 启动一个全局函数或静态成员函数 #include QtConcurrentvoid myFunction(int arg1, double arg2) {// 处理函数 }int main() {QFuturevoid future QtConcurrent::run(myFunction, 1, 2.0); }使用 Lambda 表达式 #include QtConcurrentint main() {auto lambda [] (int value) {// 一些处理};QFuturevoid future QtConcurrent::run(lambda, 42); }启动类的成员函数 #include QtConcurrentclass MyClass { public:void myMemberFunction(int arg) {// 处理函数} };int main() {MyClass myObject;QFuturevoid future QtConcurrent::run(MyClass::myMemberFunction, myObject, 123); }指定执行的线程 默认情况下QtConcurrent::run 使用全局线程池来执行任务。但是你也可以指定一个自定义的 QThreadPool 来运行任务。 #include QtConcurrentvoid myFunction() {// 函数实现 }int main() {QThreadPool pool;pool.setMaxThreadCount(2); // 设置线程池大小QFuturevoid future QtConcurrent::run(pool, myFunction);future.waitForFinished(); // 等待任务完成 }使用返回值 如果被调用的函数有返回值你可以通过 QFutureT 来获取这个值。 #include QtConcurrentint computeValue() {return 42; }int main() {QFutureint future QtConcurrent::run(computeValue);int result future.result(); // 获取结果return result; }注意事项 线程安全确保你传递给 QtConcurrent::run 的函数是线程安全的特别是当你在多个线程中访问共享数据时。资源管理当你在多线程环境中工作时需要特别注意资源管理和数据同步。生命周期管理确保所有 QtConcurrent::run 使用的对象在任务执行期间保持有效。 2.代码1槽函数定义——QtConcurrent::run(Lambda表达式)——全局函数 运行 #include QApplication #include QPushButton #include QMainWindow #include QtConcurrent// 假设这是一个耗时的函数 void heavyFunction() {// 模拟耗时操作例如计算或数据处理for (int i 0; i 100000000; i) {double x i * 0.001;x x / 2.0;} }class MainWindow : public QMainWindow {Q_OBJECT public:MainWindow(QWidget *parent nullptr) : QMainWindow(parent) {// 创建按钮QPushButton *pushButton new QPushButton(Run Heavy Function, this);pushButton-setGeometry(100, 50, 200, 50);// 连接按钮的点击信号到相应的槽connect(pushButton, QPushButton::clicked, this, MainWindow::on_pushButton_clicked);}public slots:void on_pushButton_clicked() {// 使用 QtConcurrent 运行重耗时函数QtConcurrent::run([] {heavyFunction();});} };int main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow w;w.show();return app.exec(); }#include main.moc // 确保包含 moc 文件以处理 QObject 的元信息3.代码2槽函数定义——QtConcurrent::run(Lambda表达式)——全局函数 运行 #include QApplication #include QPushButton #include QtConcurrent// 假设的耗时函数 void heavyFunction() {// 模拟耗时操作例如进行复杂计算for (int i 0; i 1000000; i) {// 模拟计算} }int main(int argc, char *argv[]) {QApplication app(argc, argv);QPushButton button(Run Heavy Function);button.resize(200, 50);button.show();// 连接按钮的点击信号到一个 lambda 表达式该表达式异步执行 heavyFunctionQObject::connect(button, QPushButton::clicked, []() {QtConcurrent::run([]{heavyFunction();});});return app.exec(); }4.代码3槽函数定义——QtConcurrent::run(this,类名::成员函数) 运行 #include QApplication #include QMainWindow #include QPushButton #include QMutex #include QtConcurrentclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr) : QMainWindow(parent) {// 设置主窗口的大小this-setFixedSize(400, 300);// 创建一个按钮并设置其显示文本和父窗口QPushButton *button new QPushButton(Run Heavy Function, this);button-setGeometry(100, 100, 200, 50);// 连接按钮的点击信号到相应的槽函数connect(button, QPushButton::clicked, this, MainWindow::on_pushButton_clicked);}~MainWindow() {}private slots:void on_pushButton_clicked() {QtConcurrent::run(this, MainWindow::heavyFunction);}private:void heavyFunction() {// 锁定互斥锁以安全访问成员变量mutex.lock();// 操作共享数据sharedData;mutex.unlock();// 执行其他耗时操作}int sharedData 0; // 一个示例成员变量QMutex mutex; // 互斥锁保护成员变量 };#include main.mocint main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow w;w.show();return app.exec(); }5.代码4槽函数定义——QtConcurrent::run(Lambda表达式[this]{执行内容}) 运行 #include QApplication #include QMainWindow #include QPushButton #include QMutex #include QtConcurrentclass MainWindow : public QMainWindow {Q_OBJECTpublic:MainWindow(QWidget *parent nullptr) : QMainWindow(parent) {// 设置主窗口的大小this-setFixedSize(400, 300);// 创建一个按钮并设置其显示文本和父窗口QPushButton *button new QPushButton(Run Heavy Function, this);button-setGeometry(100, 100, 200, 50);// 连接按钮的点击信号到相应的槽函数connect(button, QPushButton::clicked, this, MainWindow::on_pushButton_clicked);}~MainWindow() {}private slots:void on_pushButton_clicked() {// 使用 lambda 表达式在后台线程上运行代码QtConcurrent::run([this] {// 锁定互斥锁以安全访问成员变量mutex.lock();// 操作共享数据sharedData;mutex.unlock();// 执行其他耗时操作});} private:int sharedData 0; // 一个示例成员变量QMutex mutex; // 互斥锁保护成员变量 };#include main.mocint main(int argc, char *argv[]) {QApplication app(argc, argv);MainWindow w;w.show();return app.exec(); }6.上述例程的test.pro TEMPLATE app TARGET qt_test INCLUDEPATH .# Add more modules by appending them here QT core gui concurrentgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsSOURCES main.cppHEADERS
http://www.zqtcl.cn/news/122586/

相关文章:

  • 丰台做网站的公司vs2015 手机网站开发
  • 宝思哲手表网站qq官网登录入口网页版
  • 二手书网站开发设计太原建设网站的公司
  • 江门网站seo推广qq代挂网站建设
  • 合肥制作网站企业做文字logo的网站
  • php 网站提速有没有帮人做简历的网站
  • 九江建网站报价比特币网站做任务
  • 电子商务网站开发目的和意义网站建设湖南岚鸿建设
  • 网站改版提交给百度个人定做衣服店
  • 网站接广告网站用途说明
  • 中兴豫建设管理有限公司网站中小企业网站建设济南兴田德润o厉害吗
  • 枣庄有做网站的吗网站 关键词 多少个
  • 广州10大网站服务品牌做网站买了域名之后
  • 北京网站备案电商网站建设考试
  • 微信官网网站虚拟主机网站被挂马
  • 怎么看网站是不是h5做的建设网站的目的和功能
  • 购销网站建设视频百度云中国数据网
  • 网站运营队伍与渠道建设成都开发网站建设
  • 手机网站图片宽度做儿童交互网站
  • 商家入驻型网站建设中小型企业查询网址
  • 园区网站建设服务公司wordpress添加好友
  • 网站建设有哪些推广渠道洛阳小程序开发公司
  • 网站的icp备案平面设计网格
  • 东莞网站建设免费服务器营销是什么意思
  • 内容管理网站建设方案阿里云wordpress搭建
  • 静安微信手机网站制作中企动力做网站费用
  • 北京网站建设交易凡客诚品特色
  • 免费建设旅游网站学校网站开发方案
  • 专门做网站的科技公司青岛做网站哪家专业
  • 佛山网站优化效果珠海婚恋网站建设市场分析