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,实现可以跨线程的临时变量。
|
||||
- QQtLocalServer QQtLocalClient, QQtNamedPipe使用QLocalSocket实现跨线程通讯。(**HighGrade**)
|
||||
- QQtLocalQueueServer QQtLocalQueueClient QQtMessageQueue使用QQtLocalQueueSocket实现跨线程通讯。(**HighGrade**)
|
||||
- 使用方法都类似于QQtSharedMemory。
|
||||
- QQtSingleTonApplication 利用基于QLocalSocket的进程间通信实现。
|
||||
|
||||
========================================================================
|
||||
|
@ -9,6 +9,8 @@
|
||||
|
||||
/**
|
||||
* @brief The QQtLocalServer class
|
||||
* 把Pipe封装成了Socket的模样。
|
||||
* Server管理Pipe的创建和销毁,listen可以调用多次,但是相同的key只有开始的一次可以成功listen。
|
||||
*/
|
||||
class QQTSHARED_EXPORT QQtLocalServer : public QLocalServer
|
||||
{
|
||||
|
@ -1,4 +1,110 @@
|
||||
#ifndef QQTNAMEDPIPE_H
|
||||
#ifndef 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
|
||||
|
@ -1,10 +1,15 @@
|
||||
#include "mainwindow.h"
|
||||
#include <qqtsingletonapplication.h>
|
||||
#include <QLocalServer>
|
||||
#include <QDebug>
|
||||
|
||||
int main ( int argc, char* argv[] )
|
||||
{
|
||||
QQtSingleTonApplication a ( argc, argv );
|
||||
//QLocalServer::removeServer ( "QQtSingleTon" );
|
||||
QLocalServer b;
|
||||
qDebug() << "listen:?" << b.listen ( "QQtSingleTon" );
|
||||
qDebug() << "listen:?" << b.isListening();
|
||||
MainWindow w;
|
||||
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
|
||||
Multi-link目录里提供了Multi-linkConfigTool图形配置工具,编译运行就可以设置,非常方便。
|
||||
在工程里包含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/16.png "这是Example app qmake成功的样子。")
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user