小编Fri*_*ich的帖子

如何使用O_DIRECT将内核空间内存(物理地址)写入文件?

我想为文件写一个物理内存.内存本身不会再被触摸,因此我想O_DIRECT用来获得最佳的写入性能.

我的第一个想法是打开/dev/mem并映射内存并将所有内容写入一个打开的文件O_DIRECT.写调用EFAULT在mmap返回的内存地址上失败().如果我不使用O_DIRECT,它会产生一个memcpy.

#include <cstdint>
#include <iostream>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <errno.h>
#include <malloc.h>
#include <sys/mman.h>

#define PRINT_ERRNO_REASON(reason)  \
        case reason: { std::cout << #reason << std::endl; } break;

void write_page_aligned_buffer(int out_fd)
{
    const ssize_t PAGE_SIZE = getpagesize();

    void* page_aligned_buffer = memalign(PAGE_SIZE, PAGE_SIZE);
    if(!page_aligned_buffer)
    {
        std::cout << "Could not allocate page aligned buffer." << std::endl;
        return;
    }

    std::cout << "Allocated a buffer …
Run Code Online (Sandbox Code Playgroud)

linux kernel kernel-module dma

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

非阻塞线程安全内存池实现

我需要一个简单的非阻塞静态块大小的内存池.我没有在网上找到这样的东西.所以每个人都需要这样的解决方案.这个是免费的...只适用于Win32.

最好的祝福,

弗里德里希

#ifndef MEMPOOL_HPP_INCLUDED
#define MEMPOOL_HPP_INCLUDED

#include "atomic.hpp"
#include "static_assert.hpp"

#pragma warning( push )
#pragma warning( disable : 4311 ) // warning C4311: 'Typumwandlung'

/// @brief Block-free memory-pool implemenation
/// @tparam T Object-type to be saved within the memory-pool.
/// @tparam S Capacy of the memory-pool.
template <typename T, int S>
class MemoryPool
{
private:
    STATIC_ASSERT(sizeof(int) == sizeof(void*), "Well, ...");

public:
    /// @brief Object-type saved within the pool.
    typedef T TYPE;
    enum
    {
        /// @brief Capacy of the memory-pool. …
Run Code Online (Sandbox Code Playgroud)

c++ nonblocking thread-safety memory-pool

6
推荐指数
1
解决办法
5476
查看次数

互锁与互斥,扩大规模的问题

我遇到了问题,我在一些线程之间共享了一个C#(.NET)对象.线程可能会用另一个线程替换该对象.使用Asynchronous框架从TCP/IP连接中唤醒线程.

序列:

线程(等待连接) - >异步回调 - >做一些线程安全的事情 - >访问共享对象 - >做一些线程安全的事情.

1.解决方案互斥:

Object sharedObject = new Object();
Mutex objectMutex = new Mutex();

void threadCallback()
{
  Object newObject = new Object();

  // some processing

  objectMutex.lock();
  // do exchange sharedObject with newObject if needed
  // very little processing here
  objectMutex.unlock();

  // some processing
}
Run Code Online (Sandbox Code Playgroud)

2.解决方案联锁

Object sharedObject = new Object();
int usingSharedObject = 0;

void threadCallback()
{
  Object newObject = new Object();

  // some processing

  // poll until we lock
  while(1 == …
Run Code Online (Sandbox Code Playgroud)

c# multithreading mutex scale

5
推荐指数
2
解决办法
4511
查看次数

在Android中绘制叠加(系统范围)

有没有办法在任何Android应用程序之上绘制一个覆盖窗口?

我使用Android x86端口并拥有系统权限.

@Edit:叠加层下面的视图应该接收所有事件.

linux android overlay framebuffer

4
推荐指数
1
解决办法
3454
查看次数

Python每个席位的许可证保护

我想为我的python应用程序创建一个每个席位的licensevalidator.编译python代码.目标是防止客户在他的公司内共享应用程序.

基本方法

  • 创建系统硬件的哈希字符串
    • 怎么做?
  • 我将创建哈希字符串(许可证密钥文件)的签名,并将签名发送回用户
  • 应用程序读取哈希字符串并根据签名验证它

也许已经存在中间件解决方案?

python license-key hardware-id

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

一个写线程,同一个套接字上的一个读线程?

我正在运行带有FreeBSD TCP/IP堆栈的eCos.让两个线程运行一个从一个套接字读取而一个线程写入同一个套接字是否安全?

嗯,我想因为它的FreeBSD堆栈操作系统并不重要.

最好的祝福,

弗里德里希

sockets multithreading

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

QImage进入QML

我的应用程序通过网络(每秒16帧)接收JPEG的实时流.应使用QML显示实时流.接收部分用C++编写,所有UI都是用QML编写的.

如何将图像数据导入QML窗口?我已经了解了如何显示QImage,但我还没有找到解决方案.

实现QDeclarativeImageProvider并使用不同的名称一遍又一遍地刷新图像源似乎是唯一的解决方案,请参阅http://qt-project.org/doc/qt-4.8/qdeclarativeimageprovider.html.

qt jpeg qimage qml

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