源码下载地址为:

http://download.csdn.net/detail/qq78442761/9856423

---------------------------------------------------------------------------------------------------------------------------------------------------------

上一节为TCP通信,未读的博友请先阅读:

http://blog.csdn.net/qq78442761/article/details/72819306

---------------------------------------------------------------------------------------------------------------------------------------------------------

在编程中,实现数据共享一般用static静态成员,和静态函数进行操作,如下图:

resource.h

#ifndef RESOURCE_H
#define RESOURCE_H#include <QMutex>class Resource
{
public:Resource();static int getResourceNum();static void increaseResourceNum(int);static void reduceResourceNum(int);static void changeToSomeNumber(int);static int resourceNum;
};#endif // RESOURCE_H

具体实现如下:

resource.cpp

#include "resource.h"
QMutex mutexResource;int Resource::resourceNum=0;Resource::Resource()
{}int Resource::getResourceNum()
{return resourceNum;
}void Resource::increaseResourceNum(int Num)
{mutexResource.lock();resourceNum+=Num;mutexResource.unlock();return;
}void Resource::reduceResourceNum(int Num)
{mutexResource.lock();resourceNum-=Num;mutexResource.unlock();return;
}void Resource::changeToSomeNumber(int Num)
{mutexResource.lock();resourceNum=Num;mutexResource.unlock();return;
}

此时为了数据的稳定,不被破坏,使用了互斥锁机制,也就是对应上面的

mutexResource.lock()和mutexResource.unlock();

下面是线程的创建,在本程序中就是服务器每秒增加一个产品,这个功能,如下图所示:


这个对应的代码是

autoincrethread.h

#ifndef AUTOINCRETHREAD_H
#define AUTOINCRETHREAD_H#include <QObject>
#include <QThread>
#include <QMutex>
#include <windows.h>
#include "resource.h"class AutoIncreThread : public QThread
{
public:AutoIncreThread(QObject *parent);// 创建与销毁线程void Create();void Destroy();void run(); //线程入口函数};#endif // AUTOINCRETHREAD_H

autoincrethread.cpp

#include "autoincrethread.h"
#include <QDebug>AutoIncreThread::AutoIncreThread(QObject *parent)
{}void AutoIncreThread::Create()
{this->start();  //运行线程
}void AutoIncreThread::Destroy()
{this->terminate();wait();
}void AutoIncreThread::run()
{while(1){Resource::increaseResourceNum(1);qDebug()<<"increaseResourceNum";Sleep(1000);}
}

他的调用在服务器的widget.cpp里面,如下:

void Widget::AutoIncreBtn()
{if(AutoInrestatus) //自增的情况(或想让他停止自增){ui->ResourceAutoInpushButton->setText("开始自增");//销毁线程m_resourceNumAutoIncre->Destroy();delete m_resourceNumAutoIncre;killTimer(m_timerId); // 关闭定时器AutoInrestatus=false;}else    //想让他自增{//用一工作线程实现m_resourceNumAutoIncre=new AutoIncreThread(NULL);m_resourceNumAutoIncre->Create();m_timerId = startTimer(500);ui->ResourceAutoInpushButton->setText("停止自增");AutoInrestatus=true;}}

源码可exe文件可以通过本文最上面的链接进行下载。

下一节是用户互斥量版本,链接如下:

http://blog.csdn.net/qq78442761/article/details/72887926

专业课程设计之客户与服务器程序的同步与通信机制的设计(三)数据共享和线程相关推荐

  1. 专业课程设计之客户与服务器程序的同步与通信机制的设计(一)项目介绍

    源码下载地址为: http://download.csdn.net/detail/qq78442761/9856423 ---------------------------------------- ...

  2. 专业课程设计之客户与服务器程序的同步与通信机制的设计(四)信号量

    信号量版源码下载地址为: http://download.csdn.net/detail/qq78442761/9862942 ------------------------------------ ...

  3. 专业课程设计之客户与服务器程序的同步与通信机制的设计(二)TCP通信

    源码下载地址为: http://download.csdn.net/detail/qq78442761/9856423 ---------------------------------------- ...

  4. 计算机科学与技术专业有哪些课程,计算机科学与技术专业课程有哪些

    技校网专门为您推荐的类似问题答案 问题1: 佛大学计算机专业课程有哪些 和国内大学计算机专业的课程是一样的~,国内的大学还不是学习的国外大学的吗. 问题2: 大学本科计算机专业课程有哪些 基础课程:高 ...

  5. 微信商城小程序(服装鞋子商场)的设计与实现(Vue.js+小程序+.NET Core )

    目录 第1章 概述 1 1.1 项目背景介绍 1 1.2 微信小程序概述 1 1.2.1 微信小程序发展状况 2 1.2.2 微信小程序丰富的API接口 2 第2章 相关技术概述 3 2.1 .NET ...

  6. Unix 网络编程(四)- 典型TCP客服服务器程序开发实例及基本套接字API介绍

    转载:http://blog.csdn.net/michael_kong_nju/article/details/43457393 写在开头: 在上一节中我们学习了一些基础的用来支持网络编程的API, ...

  7. java 守护进程 linux_Java实现Linux下服务器程序的双守护进程

    一.简介 现在的服务器端程序很多都是基于Java开发,针对于Java开发的Socket程序,这样的服务器端上线后出现问题需要手动重启,万一大半夜的挂了,还是特别麻烦的. 大多数的解决方法是使用其他进程 ...

  8. 并发型服务器响应方式,基于Java NIO 开发高性能并发型服务器程序的研究

    基于Java NIO 开发高性能并发型服务器程序的研究 第8卷%第5期 软件导刊 2009年5月SoftwareGuide Vol.8No.5May.2009 基于JavaNIO开发高性能并发型服务器 ...

  9. 基于matlab的64QAM,通信调制体制设计之64QAM性能分析MATLAB仿真及代码

    通信调制体制设计之64QAM性能分析MATLAB仿真及代码 通信调制体制设计之64QAM性能分析MATLAB仿真及代码 任务背景 弗雷泽岛旅游经理在审查您之前建立无线链路任务的解决方案时,正在研究使用 ...

最新文章

  1. 动态规划入门 洛谷P1108 低价购买
  2. assert()函数用法总结——转
  3. 全球及中国陶瓷脐轮行业投资份额及需求前景调研报告2021-2027年版
  4. h5 bootstrap 小程序模板_一道面试题小程序与H5的区别
  5. 卸载 linux http
  6. 网上邻居访问提示未授予用户在此计算机上的请求登录类型的解决
  7. 行!看到抖音上Python程序员晒得工资条,我沉默了......
  8. 还是TicTacToe 2.0
  9. 博客园自定义主题样式
  10. MTK驱动开发(21)---camera基础知识2
  11. window 后台启动java参数启动
  12. Linux文件系统的目录结构详解
  13. I00023 鸡兔同笼解法二
  14. log4j和web.xml配置webAppRootKey 的问题(一个tomcat下部署多个应用)
  15. altium designer设计3D PCB技巧
  16. VGG16网络,VGG19
  17. 基于布隆过滤器实现敏感词识别和过滤 1
  18. 怎么把腾讯视频的qlv文件转成mp3格式 【已解决】
  19. Android 开源优秀项目
  20. mysql applier_DRC 是唯品会自研的MySQL双向复制方案,主要应用场景是数据库双向复制、单向复制...

热门文章

  1. 双非同学,自学编程,毕业一年逆袭百度!
  2. 职场中神奇的程序员,却常常被人说“太直”,这是什么样的思维?
  3. 实用、酷炫的可视化,你用10小时,同事用10分钟,差距在哪?
  4. 10W人都想知道的答案!可视化黑科技,这4个数据工具谁最厉害的?
  5. 【转载】他是个残疾人 mynote V1.01发布
  6. 【转载】我只是随便说说的即时通讯
  7. you just 飞鸽传书2007绿色版 ever day for two years
  8. 飞鸽传书(http://www.freeeim.com)软件下载
  9. 谷歌放弃C++语言,Python将要一统江湖了?
  10. 编程技术越来越被看中 编程到底是什么?赶紧看看!