小编Aur*_*ien的帖子

如何生成主机唯一ID?

我有几个一起工作并且需要通信的应用程序。

这些应用程序可以安装在不同的主机上,这些主机可以位于不同的本地网络中,但都通过全球网络连接在一起。

主机可以是Linux(CenOS、Debian、Ubuntu)或Windows(7/10)。

现在,我需要确定哪个主机正在运行应用程序。

要求是: - 在同一主机上运行的每个应用程序都具有相同的“主机 ID” - 每个“主机 ID”在所有主机中都是唯一的

由于主机可以是物理机、虚拟机甚至docker实例,所以我认为我不能将主机名用作“全局唯一ID”。

由于主机可以位于不同的本地网络中,我认为我不能使用本地IP地址作为“全球唯一ID”。

那么,我可以使用哪些数据?也许是网络适配器的 MAC 地址?即使在同一个 docker 的多个实例之间,它是否保证是唯一的?

谢谢。

linux networking uniqueidentifier docker

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

线程睡眠VS等待条件

编辑:

这里的要点是知道实现等待循环的更有效的解决方案,该循环在每次迭代中轮询一个条件.通过有效,我的意思是"有效的CPU调度".

我知道我的代码中使用的等待条件不是"wakeOne"/"wakeAll"指令所使用的"实际等待条件",但我想知道使用伪等待条件对CPU来说比睡眠更有效.

原帖:

这里有两个代码片段,它们做同样的事情:等到事情发生.此代码用于工作线程池中.因此,当线程等待时,其他人(或其他一些人)应该处理他们的指令.

第一个使用"睡眠",第二个使用"等待条件".它们是用Qt编写的,但可以很容易地翻译成C++ 11,Boost或任何线程库.

两者都运作良好,但有任何性能差异?我记得我在某处读过:

"睡眠"导致主动等待,因此CPU花费时间等待.

"等待条件"使CPU等待事件,因此CPU在等待期间切换到另一个线程执行

我记得很清楚吗?真的吗 ?使用等待条件更有效地并行执行多个线程?

"睡眠"版本:

while (someCondition == false)
{
    sleep(100);
}

// Do some work
Run Code Online (Sandbox Code Playgroud)

"WaitCondition"版本:

QMutex mutex(QMutex::NonRecursive);
QWaitCondition waitCondition;

while (someCondition == false)
{
    QMutexLocker locker(&mutex);
    waitCondition.wait(&mutex, 100);
}

// Do some work
Run Code Online (Sandbox Code Playgroud)

c++ multithreading async-await

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

Qt信号是否可以从另一个QThread安全地发出

QThread在我的应用程序中使用了一些.

我的对象在不同的​​线程中"活动"(它们的所有者线程为Qt意味着它是不同的)并使用带有排队连接的信号/槽来进行通信.

现在,我有这个问题:

  • 对象"A"生活在QThread"A"中
  • 对象"B"生活在QThread"B"中
  • 桂生活在"主线"

然后 :

  • 对象"A" B::foo从其自己的线程"A" 调用"B"实例上的方法
  • B::foo使用互斥锁保护此方法共享的资源,这里没有问题B::foo从线程"A"执行
  • B::foo方法内部,对象"B"发出信号barSignal

我对他的配置有一些疑问:

  • 从不是"B"所有者的线程发出对象"B"的信号是否安全QThread

  • 用于Qt::AutoConnection在生活在"Qt主线程"中的GUI对象中接收此信号是否安全?

  • Qt::AutoConnection在生活在它自己的QThread"C" 中的对象"C"中使用a 接收此信号是否安全?

我的测试往往对一切都说"是".通过阅读Qt emit代码,似乎没问题.但它没有在Qt文档中找到任何关于" 从一个不是发射器的所有者线程的线程发出信号 "的内容.

qt multithreading signals-slots qthread

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

将字符串中的所有非 ASCII 字符替换为其 ASCII 等效字符

使用 Qt/C++,我需要生成一个仅包含 ASCII 字符子集的字符串:字母、数字、连字符、下划线、句点或冒号。

\n\n

作为输入,我可以有任何东西。

\n\n

所以我尝试应用一些规则:

\n\n
    \n
  • 每个 QChar::isSpace 都将替换为下划线
  • \n
  • 每个非 ASCII 字母都将替换为等效的 ASCII 字母(例如:“\xc3\xa9”将替换为“e”)
  • \n
  • 所有其他非 ASCII 字符都将被删除
  • \n
\n\n

Qt/C++ 有没有简单的方法来应用第二条和第三条规则?

\n\n

谢谢

\n

c++ string qt

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