专业课程设计之客户与服务器程序的同步与通信机制的设计(三)数据共享和线程
源码下载地址为:
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
专业课程设计之客户与服务器程序的同步与通信机制的设计(三)数据共享和线程相关推荐
- 专业课程设计之客户与服务器程序的同步与通信机制的设计(一)项目介绍
源码下载地址为: http://download.csdn.net/detail/qq78442761/9856423 ---------------------------------------- ...
- 专业课程设计之客户与服务器程序的同步与通信机制的设计(四)信号量
信号量版源码下载地址为: http://download.csdn.net/detail/qq78442761/9862942 ------------------------------------ ...
- 专业课程设计之客户与服务器程序的同步与通信机制的设计(二)TCP通信
源码下载地址为: http://download.csdn.net/detail/qq78442761/9856423 ---------------------------------------- ...
- 计算机科学与技术专业有哪些课程,计算机科学与技术专业课程有哪些
技校网专门为您推荐的类似问题答案 问题1: 佛大学计算机专业课程有哪些 和国内大学计算机专业的课程是一样的~,国内的大学还不是学习的国外大学的吗. 问题2: 大学本科计算机专业课程有哪些 基础课程:高 ...
- 微信商城小程序(服装鞋子商场)的设计与实现(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 ...
- Unix 网络编程(四)- 典型TCP客服服务器程序开发实例及基本套接字API介绍
转载:http://blog.csdn.net/michael_kong_nju/article/details/43457393 写在开头: 在上一节中我们学习了一些基础的用来支持网络编程的API, ...
- java 守护进程 linux_Java实现Linux下服务器程序的双守护进程
一.简介 现在的服务器端程序很多都是基于Java开发,针对于Java开发的Socket程序,这样的服务器端上线后出现问题需要手动重启,万一大半夜的挂了,还是特别麻烦的. 大多数的解决方法是使用其他进程 ...
- 并发型服务器响应方式,基于Java NIO 开发高性能并发型服务器程序的研究
基于Java NIO 开发高性能并发型服务器程序的研究 第8卷%第5期 软件导刊 2009年5月SoftwareGuide Vol.8No.5May.2009 基于JavaNIO开发高性能并发型服务器 ...
- 基于matlab的64QAM,通信调制体制设计之64QAM性能分析MATLAB仿真及代码
通信调制体制设计之64QAM性能分析MATLAB仿真及代码 通信调制体制设计之64QAM性能分析MATLAB仿真及代码 任务背景 弗雷泽岛旅游经理在审查您之前建立无线链路任务的解决方案时,正在研究使用 ...
最新文章
- 动态规划入门 洛谷P1108 低价购买
- assert()函数用法总结——转
- 全球及中国陶瓷脐轮行业投资份额及需求前景调研报告2021-2027年版
- h5 bootstrap 小程序模板_一道面试题小程序与H5的区别
- 卸载 linux http
- 网上邻居访问提示未授予用户在此计算机上的请求登录类型的解决
- 行!看到抖音上Python程序员晒得工资条,我沉默了......
- 还是TicTacToe 2.0
- 博客园自定义主题样式
- MTK驱动开发(21)---camera基础知识2
- window 后台启动java参数启动
- Linux文件系统的目录结构详解
- I00023 鸡兔同笼解法二
- log4j和web.xml配置webAppRootKey 的问题(一个tomcat下部署多个应用)
- altium designer设计3D PCB技巧
- VGG16网络,VGG19
- 基于布隆过滤器实现敏感词识别和过滤 1
- 怎么把腾讯视频的qlv文件转成mp3格式 【已解决】
- Android 开源优秀项目
- mysql applier_DRC 是唯品会自研的MySQL双向复制方案,主要应用场景是数据库双向复制、单向复制...
热门文章
- 双非同学,自学编程,毕业一年逆袭百度!
- 职场中神奇的程序员,却常常被人说“太直”,这是什么样的思维?
- 实用、酷炫的可视化,你用10小时,同事用10分钟,差距在哪?
- 10W人都想知道的答案!可视化黑科技,这4个数据工具谁最厉害的?
- 【转载】他是个残疾人 mynote V1.01发布
- 【转载】我只是随便说说的即时通讯
- you just 飞鸽传书2007绿色版 ever day for two years
- 飞鸽传书(http://www.freeeim.com)软件下载
- 谷歌放弃C++语言,Python将要一统江湖了?
- 编程技术越来越被看中 编程到底是什么?赶紧看看!