小编g19*_*tic的帖子

实现QThread的正确方法是什么......(请举例......)

QThread的Qt文档说是从QThread创建一个类,并实现run方法.

以下内容来自4.7 Qthread文档......

要创建自己的线程,请继承QThread并重新实现run().例如:

 class MyThread : public QThread
 {
 public:
     void run();
 };

 void MyThread::run()
 {
     QTcpSocket socket;
     // connect QTcpSocket's signals somewhere meaningful
     ...
     socket.connectToHost(hostName, portNumber);
     exec();
 }
Run Code Online (Sandbox Code Playgroud)

所以在我创建的每一个线程中,我都做到了这一点,并且对于大多数事情来说它工作正常(我没有在我的任何对象中实现moveToThread(this)并且它工作得很好).

我上周遇到了障碍(设法通过解决我创建对象的地方来解决它)并找到了以下博文.这里基本上说子类化QThread确实不是正确的方法(并且文档不正确).

这是来自Qt的开发人员,所以乍一看我很感兴趣,经过进一步的反思,同意他.按照OO原则,你真的只想子类化一个类来进一步增强该类......不要直接使用类方法......这就是为什么要实例化...

让我们说我想将一个自定义QObject类移动到一个线程......这样做的"正确"方法是什么?在那篇博客文章中,他说'他在某个地方有一个例子......但如果有人可以向我进一步解释它,我将不胜感激!

更新:

由于这个问题引起了如此多的关注,下面是4.8文档的复制和粘贴,以及实现QThread的"正确"方式.

class Worker : public QObject
 {
     Q_OBJECT
     QThread workerThread;

 public slots:
     void doWork(const QString &parameter) {
         // ...
         emit resultReady(result);
     }

 signals:
     void resultReady(const QString &result);
 };

 class Controller : public QObject
 {
     Q_OBJECT
     QThread workerThread;
 public:
     Controller() {
         Worker *worker = …
Run Code Online (Sandbox Code Playgroud)

qt multithreading qt4 qthread

62
推荐指数
2
解决办法
7万
查看次数

如何从一组已定义的描述符动态构建新的protobuf?

在我的服务器上,我们收到了自我描述的消息(这里定义了 ......因为在c ++中没有任何'好'的例子),这并不是那么简单.

在这一点上,我没有问题从这些自我描述的消息中创建消息.我可以使用FileDescriptorSet,遍历每个FileDescriptorProto,将每个文件添加到DescriptorPool(使用BuildFile,它也为我提供了每个定义的FileDescriptor).

从这里我可以创建在FileDescriptorSet中定义的任何消息,其中DynamicMessageFactory与DP一起实例化并调用GetPrototype(这很容易,因为我们的SelfDescribedMessage需要消息full_name(),因此我们可以调用FindMessageTypeByName方法DP,给我们正确编码的Message Prototype).

问题是如何获取每个已定义的描述符或消息,并动态构建包含所有已定义消息的"主"消息作为嵌套消息.这主要用于保存消息的当前状态.目前我们只是通过实例化服务器中每种消息的类型来处理这个问题(以保持不同程序的中心状态).但是当我们想要"保存"当前状态时,我们不得不按照此处的定义将它们流式传输到磁盘.它们一次流式传输一条消息(带有大小前缀).我们希望有一条消息(一条用于统治所有消息)而不是单独消息的稳定流.一旦解决了这个问题,它就可以用于其他事情(基于网络的共享状态,优化和简单的序列化)

由于我们已经有了交叉链接和定义的描述符,人们会认为有一种简单的方法可以从那些已定义的消息构建"新"消息.到目前为止,解决方案已经提到了我们.我们已经尝试创建我们自己的DescriptorProto并从已经定义的描述符中添加该类型的新字段但是迷路了(还没有深入研究这个).我们还看过可能会将它们添加为扩展名(目前未知如何).我们是否需要创建自己的DescriptorDatabase(此时还不知道如何操作)?

任何见解?


BitBucket上的链接示例源.


希望这个解释会有所帮助.

我试图从一组已定义的消息动态构建一个消息.已经定义的消息集是使用官方c ++ protobuf教程中(简要说明)解释的"自描述"方法创建的(即这些消息在编译形式中不可用).需要在运行时创建此新定义的消息.

尝试使用每个消息的直接描述符并尝试构建FileDescriptorProto.试过看过DatabaseDescriptor方法.两个都没有运气.目前正试图将这些定义的消息添加为另一条消息的扩展(即使在编译时那些定义的消息,并且它们的'描述符集'也没有被分类为扩展任何内容),这是示例代码开始的地方.

c++ dynamic protocol-buffers

28
推荐指数
2
解决办法
1万
查看次数

C++ Boost ASIO简单周期定时器?

我想要一个非常简单的周期性定时器,每50ms调用一次我的代码.我可以创建一个一直睡眠50ms的线程(但这很痛苦)...我可以开始研究Linux API用于制作计时器(但它不可移植)......

我想使用boost.我只是不知道这是可能的.boost是否提供此功能?

c++ linux boost boost-asio

24
推荐指数
2
解决办法
4万
查看次数

javascript - 创建简单动态数组

什么是动态创建这个简单数组的最有效方法.

var arr = [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
Run Code Online (Sandbox Code Playgroud)

假设我们可以从变量得到数字10

var mynumber = 10;
Run Code Online (Sandbox Code Playgroud)

javascript

24
推荐指数
4
解决办法
15万
查看次数

在sqlite3语句中绑定'unsigned long'(uint64)?C++

我正在使用sqlite.org上提供的sqlite3库.

我有一些我想要存储在数据库中的unsigned longs.我不想自己构建查询并将其保持开放以进行某种注入(无论是否是偶然的).因此,我正在使用这些sqlite_bind_*函数来"清理"我的参数.

问题是对于无符号长整数,只有整数没有函数类型.

int sqlite3_bind_int(sqlite3_stmt*, int, int);

int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);

如果我无法以无符号方式存储它们,我肯定会有数字会溢出.

我自己需要自己管理吗?(即在插入数据库之前从db中选择或转换为signed类型后转换为无符号类型)

如果我自己必须自己管理,当比较真的意味着在无符号范围内时,如何做一些存储为有符号长整数的比较查询?

查看转换后的INTEGER数据类型,可以认为无符号长整数可以毫无问题地表示.

如果有其他可用解决方案,请赐教!谢谢!

c++ sqlite bind unsigned-integer

16
推荐指数
2
解决办法
2万
查看次数

使用VIM进行C++/Qt开发,具有自动完成功能

在工作中,我主要用C++编程,当需要图形/多线程/网络启用时使用Qt.我们的环境是windows,我目前使用Visual Studio(仅用于调试目的)和Qt-Creator的组合进行实际编码(比他们的自动完成比VS更好).

在家里,我主要使用linux(fedora),仍然使用Qt-Creator,因为我还没有找到替代品.我使用VIM几乎所有其他东西(编辑明智),并且基本上喜欢它的一切.

我希望能够将VIM用于我的编程(无论是在家还是在工作中),但发现如果没有自动完成功能,我的效率就会提高.

任何人都有一个很好的教程,论坛帖子或个人经验,如何在VIM中为C++和Qt获得"好"自动完成(是的......不完全非常具有描述性......'好'......)?我相信它非常适合linux/vim/qt/c ++,但是它也适用于Windows吗?

谢谢

c++ vim qt autocomplete

14
推荐指数
2
解决办法
1万
查看次数

检查OpenCV是否使用TBB编译

如何检查我的Linux机器上安装的OpenCV库是否针对TBB库进行编译?

linux opencv tbb

12
推荐指数
1
解决办法
5249
查看次数

任何人仍然直接使用xlib编程

我对所有与xlib相关的问题缺乏回应感到惊讶,这是因为没有人再直接使用xlib了,或者这是问这些类型问题的错误地方?即使没有人直接使用xlib,仍然必须有人记住过去的坏日子并帮助解决这些问题,但看起来他们不在这里......

编辑:我可以请求xlib相关帮助的其他地方?

x11 xlib

7
推荐指数
1
解决办法
1147
查看次数

是否可以为c ++使用`django model`类型抽象?

在Django(使用python)中,您可以非常轻松地创建"模型",允许您抽象出所有SQL,并简单地使用对象从数据库中检索/存储信息.

任何人都可以指向我允许我做同样事情的c ++库吗?目前我们正在使用postgres后端并与libpqxx连接.我们创建了自己的面向对象的数据模型,但必须反复复制/粘贴sql代码,然后对每个"模型"进行修改.如果我们必须转向不同的后端,上帝会帮助我们,因为大部分代码需要进行调整(目前它不是以创建不同后端部分的方式抽象的).

是否存在允许我连接到不同类型的后端数据库的库,并且抽象出编写任何SQL以定义和使用我们的数据库模型的需要?

c++ database django orm django-models

5
推荐指数
1
解决办法
296
查看次数

operator <<和std :: stringstream引用?

我有一个类,它包含对stringstream的引用(用作整个应用程序日志).如何在引用的字符串流中添加文本?

一个例子(因为我不能在这里发布实际来源......)
主要

stringstream appLog;
RandomClass myClass;
.....
myClass.storeLog(&applog);
myClass.addText("Hello World");
cout << appLog.str().c_str() << endl;
Run Code Online (Sandbox Code Playgroud)

RandomClass cpp

void RandomClass::storeLog(stringstream *appLog)
{
  m_refLog = appLog;
}

void RandomClass::addText(const char text[])
{
  m_refLog << text;    //help here...?
}
Run Code Online (Sandbox Code Playgroud)

我使用与上面非常相似的设置和方法结构在我的真实应用程序中收到以下错误. error C2296: '<<' : illegal, left operand has type 'std::stringstream *'
error C2297: '<<' : illegal, right operand has type 'const char [11]'

我知道这个错误是因为我正在使用引用但仍然试图做"<<",但我还能怎么做呢? m_refLog-><<???

c++ std stringstream

3
推荐指数
1
解决办法
3666
查看次数

如何在python中为HTML操作/抓取在HTML上运行jquery命令?

让我们说我正在使用urllib2和cookiejar(就像这样)来获取网站的回复.现在我正在寻找一种简单的方法来使用jQuery来从Web服务器返回的响应中获取数据.

我知道还有其他模块可以在python中用于web-scraping(比如),但它可能只用jQuery命令吗?我假设我需要在python中使用某种js解析器?

我想要使​​用jQuery的原因是我有大约20个Greasemonkey脚本(大多数由其他人编写)对许多网站和网页游戏做了一些有趣的修改.他们使用jQuery完成所有DOM修改.我希望能够简单地将其移植到python(实现简单有效的自动化),而不是完全重构这些工作和可靠的大部分代码.

javascript python jquery dom web-scraping

2
推荐指数
1
解决办法
1364
查看次数