mirror of
https://gitee.com/drabel/LibQQt.git
synced 2025-01-04 10:18:44 +08:00
update namedpipe
This commit is contained in:
parent
f0e3f15929
commit
306fb2992c
@ -101,6 +101,7 @@ github link: https://github.com/AbelTian/LibQQt
|
|||||||
- QQtSharedMemory,实现可以跨线程的临时变量。
|
- QQtSharedMemory,实现可以跨线程的临时变量。
|
||||||
- QQtLocalServer QQtLocalClient, QQtNamedPipe使用QLocalSocket实现跨线程通讯。(**HighGrade**)
|
- QQtLocalServer QQtLocalClient, QQtNamedPipe使用QLocalSocket实现跨线程通讯。(**HighGrade**)
|
||||||
- QQtLocalQueueServer QQtLocalQueueClient QQtMessageQueue使用QQtLocalQueueSocket实现跨线程通讯。(**HighGrade**)
|
- QQtLocalQueueServer QQtLocalQueueClient QQtMessageQueue使用QQtLocalQueueSocket实现跨线程通讯。(**HighGrade**)
|
||||||
|
- 使用方法都类似于QQtSharedMemory。
|
||||||
- QQtSingleTonApplication 利用基于QLocalSocket的进程间通信实现。
|
- QQtSingleTonApplication 利用基于QLocalSocket的进程间通信实现。
|
||||||
|
|
||||||
========================================================================
|
========================================================================
|
||||||
|
@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The QQtLocalServer class
|
* @brief The QQtLocalServer class
|
||||||
|
* 把Pipe封装成了Socket的模样。
|
||||||
|
* Server管理Pipe的创建和销毁,listen可以调用多次,但是相同的key只有开始的一次可以成功listen。
|
||||||
*/
|
*/
|
||||||
class QQTSHARED_EXPORT QQtLocalServer : public QLocalServer
|
class QQTSHARED_EXPORT QQtLocalServer : public QLocalServer
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,110 @@
|
|||||||
#ifndef QQTNAMEDPIPE_H
|
#ifndef QQTNAMEDPIPE_H
|
||||||
#define QQTNAMEDPIPE_H
|
#define QQTNAMEDPIPE_H
|
||||||
|
|
||||||
|
#include <qqt-local.h>
|
||||||
|
#include <qqtcore.h>
|
||||||
|
#include <qqtmessage.h>
|
||||||
|
#include <qqtlocalclient.h>
|
||||||
|
#include <qqtlocalserver.h>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief The QQtNamedPipe class
|
||||||
|
* 类似于QSharedMemory使用方式。只不过底层使用Pipe(QLocalSocket)实现。
|
||||||
|
*/
|
||||||
|
class QQTSHARED_EXPORT QQtNamedPipe : public QQtLocalClient
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit QQtNamedPipe ( const QString& key, QObject* parent = Q_NULLPTR ) : QQtLocalClient ( parent ) {
|
||||||
|
|
||||||
|
}
|
||||||
|
~QQtNamedPipe() {}
|
||||||
|
|
||||||
|
//需要重写,改变共享内存块大小。
|
||||||
|
virtual void initializer() {
|
||||||
|
//user set payload size.
|
||||||
|
//这个只需要调用一次,但是调用多次也正常使用。我在这个教程父类里面给的是1024.子类可变可改。这个是最大约束,万万不能超过。
|
||||||
|
//create ( 1024 );
|
||||||
|
//这个每个变量都必须调用!是这个函数保证data()指针有数的。
|
||||||
|
//attach();
|
||||||
|
}
|
||||||
|
|
||||||
|
//需要重写,实现把局部变量打包到共享内存块。(注释部分。)
|
||||||
|
//这个函数保证写入共享内存。
|
||||||
|
virtual void packer() {
|
||||||
|
//lock();
|
||||||
|
|
||||||
|
//user data struct
|
||||||
|
QByteArray bytes;
|
||||||
|
//bytes << a;
|
||||||
|
|
||||||
|
//这个是无论如何不应该发生的,用户在申请空间的时候应当申请足够的以供变动的空间。
|
||||||
|
if ( bytes.size() > size() ) {
|
||||||
|
pline() << "bytes size out payload..., create more...";
|
||||||
|
//unlock();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
//memcpy ( data(), bytes.constData(), bytes.size() );
|
||||||
|
//unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
//需要重写,实现把共享内存块解压到局部变量。(注释部分。)
|
||||||
|
//这个函数保证从共享内存读取。
|
||||||
|
virtual void parser() {
|
||||||
|
//lock();
|
||||||
|
QByteArray bytes;
|
||||||
|
bytes.resize ( size() );
|
||||||
|
//memcpy ( bytes.data(), data(), size() );
|
||||||
|
|
||||||
|
//user data struct
|
||||||
|
//bytes >> a;
|
||||||
|
|
||||||
|
//unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*以下函数提供操作方便。*/
|
||||||
|
|
||||||
|
QByteArray readShortString ( QByteArray& bytes ) {
|
||||||
|
quint16 s0;
|
||||||
|
QByteArray str;
|
||||||
|
bytes >> s0;
|
||||||
|
str.resize ( s0 );
|
||||||
|
bytes >> str;
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void writeShortString ( QByteArray& bytes, QByteArray& shortString ) {
|
||||||
|
quint16 s0 = shortString.size();
|
||||||
|
bytes << s0;
|
||||||
|
bytes << shortString;
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray readString ( QByteArray& bytes ) {
|
||||||
|
quint32 s0;
|
||||||
|
QByteArray str;
|
||||||
|
bytes >> s0;
|
||||||
|
str.resize ( s0 );
|
||||||
|
bytes >> str;
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
void writeString ( QByteArray& bytes, QByteArray& shortString ) {
|
||||||
|
quint32 s0 = shortString.size();
|
||||||
|
bytes << s0;
|
||||||
|
bytes << shortString;
|
||||||
|
}
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
private:
|
||||||
|
/**
|
||||||
|
* example
|
||||||
|
* quint32 a;
|
||||||
|
* QByteArray b;
|
||||||
|
* quint8 c;
|
||||||
|
*/
|
||||||
|
};
|
||||||
|
|
||||||
#endif // QQTNAMEDPIPE_H
|
#endif // QQTNAMEDPIPE_H
|
||||||
|
@ -1,10 +1,15 @@
|
|||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include <qqtsingletonapplication.h>
|
#include <qqtsingletonapplication.h>
|
||||||
|
#include <QLocalServer>
|
||||||
|
#include <QDebug>
|
||||||
|
|
||||||
int main ( int argc, char* argv[] )
|
int main ( int argc, char* argv[] )
|
||||||
{
|
{
|
||||||
QQtSingleTonApplication a ( argc, argv );
|
QQtSingleTonApplication a ( argc, argv );
|
||||||
//QLocalServer::removeServer ( "QQtSingleTon" );
|
//QLocalServer::removeServer ( "QQtSingleTon" );
|
||||||
|
QLocalServer b;
|
||||||
|
qDebug() << "listen:?" << b.listen ( "QQtSingleTon" );
|
||||||
|
qDebug() << "listen:?" << b.isListening();
|
||||||
MainWindow w;
|
MainWindow w;
|
||||||
w.show();
|
w.show();
|
||||||
|
|
||||||
|
3
usage.md
3
usage.md
@ -198,7 +198,8 @@ LIB_SDK_ROOT=R:\Develop\d1-sdk
|
|||||||
APP_BUILD_ROOT=R:\Develop\c0-buildstation
|
APP_BUILD_ROOT=R:\Develop\c0-buildstation
|
||||||
Multi-link目录里提供了Multi-linkConfigTool图形配置工具,编译运行就可以设置,非常方便。
|
Multi-link目录里提供了Multi-linkConfigTool图形配置工具,编译运行就可以设置,非常方便。
|
||||||
在工程里包含multi-link/add_base_manager.pri,在project build config设置环境变量QSYS,就可以使用里面的丰富函数。简单吧!
|
在工程里包含multi-link/add_base_manager.pri,在project build config设置环境变量QSYS,就可以使用里面的丰富函数。简单吧!
|
||||||
*注意:Multi-link 2已经不支持Qt4,如果需要Qt第四代,那么使用multi-link 1.0链接QQt。*
|
*注意:Multi-link 2 已经不支持Qt4,如果需要Qt第四代,那么使用multi-link 1.0链接QQt。*
|
||||||
|
*注意:Multi-link 2 APP_BUILD_ROOT变成了optional,但是依然需要设置一下,以免还有需要的地方。build root是一切开始的地方。*
|
||||||
![qmake成功](screenshot/15.png "这是LibQQt qmake成功的样子。")
|
![qmake成功](screenshot/15.png "这是LibQQt qmake成功的样子。")
|
||||||
![qmake成功](screenshot/16.png "这是Example app qmake成功的样子。")
|
![qmake成功](screenshot/16.png "这是Example app qmake成功的样子。")
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user