小编OzB*_*rry的帖子

在QT5中实现原子队列

我在Qt中构建一个相当复杂的应用程序,可以动态加载动态库并将它们作为线程运行,并且它们必须尽可能快地在彼此之间传递信息,所以我认为原子队列将是我最好的情况,所以这是AtomicQueue.hpp文件:

#ifndef ATOMICQUEUE_HPP
#define ATOMICQUEUE_HPP

#include <QAtomicPointer>


// Used http://www.drdobbs.com/parallel/writing-lock-free-code-a-corrected-queue/210604448?pgno=2
// as reference
template<class T>
class AtomicQueue
{
    struct QueueNode
    {
        QueueNode( const T& value ) : next( NULL ), data( value ) {}
        ~QueueNode() { if ( next ) delete next; }
        QueueNode   *next;
        T           data;
    };

public:
    AtomicQueue()
    {
        m_front = new QueueNode( T() );
        m_tail.store( m_front );
        m_divider.store( m_front );
    }

    ~AtomicQueue() {}

    void push( const T& value )
    {
        m_tail.load()->next = new QueueNode( value );
        m_tail …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading atomic atomicity qt5

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

Windows Media Foundation录制音频

我正在使用windows media foundation api来枚举我的麦克风和可用的相机,两者都有效.

这是我的枚举代码:

class deviceInput {
public:
    deviceInput( REFGUID source );
    ~deviceInput();

    int listDevices(bool refresh = false);
    IMFActivate *getDevice(unsigned int deviceId);
    const WCHAR *getDeviceName(unsigned int deviceId);

private:
    void Clear();
    HRESULT EnumerateDevices();

    UINT32      m_count;
    IMFActivate **m_devices;
    REFGUID     m_source;
};

deviceInput::deviceInput( REFGUID source )
    : m_devices( NULL )
    , m_count( 0 )
    , m_source( source )
{   }

deviceInput::~deviceInput()
{
    Clear();
}

int deviceInput::listDevices(bool refresh)
{
    if ( refresh || !m_devices ) {
        if ( FAILED(this->EnumerateDevices()) ) return -1;
    } …
Run Code Online (Sandbox Code Playgroud)

c++ winapi mfc ms-media-foundation

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

JNI ByteBuffer放了字节

JNIEXPORT jboolean JNICALL Java_directshowcamera_dsInterface_grab_1frame_1stream(JNIEnv *env, jobject obj, jint streamid, jobject barray)
{
    jclass bbclass = env->FindClass( "java/nio/ByteBuffer" );
    jmethodID putMethod = env->GetMethodID(bbclass, "put", "(I, B)Ljava/nio/ByteBuffer");
    unsigned char *buffer = stream_buffer( streamid );

    if( !stream_image_ready( streamid ) ) return (jboolean)0;

    for(int i=0; i < stream_device_size( streamid ); i++ ) {
        env->CallByteMethod( barray, putMethod, i, (jbyte)buffer[i] );
    }

    return (jboolean)1;
}
Run Code Online (Sandbox Code Playgroud)

所以,我有一个字节缓冲区,并且在Java中我已经分配了适当的大小,并注意到可以使用ByteBuffer.put(索引,字节),所以我试图获得该方法,但是当我在Java中时,我获得以下运行时异常:

java.lang.NoSuchMethodError:put

我做错了什么想法?我不太了解JNI,并且大部分时间都是我在网上找到的重复工作示例.

c++ java java-native-interface bytebuffer nosuchmethoderror

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

C++ MFC从窗口小部件ID添加组合框字符串项

我在MFC项目的MSVC 2010专业版的gui编辑器中添加了一个组合框.我有一个我从外部源获取的字符串列表,并希望将它们添加到我的组合框中.我搜索了一段时间,每个帖子似乎都暗示我需要使用CComboBox类,但是,我不知道如何从gui编辑器中的组合框元素的资源ID获取类变量.

总之,如何使用宏(如CB_ADDSTRING(RESOURCE_ID, "my string");)或使用CComboBOx(类似的东西CComboBox::GetObject(RESOURCE_ID)->AddString("blah");)将字符串添加到我的组合框中.

我没有做很多win32 api/mfc编程,只是开始摆弄它.

winapi mfc ccombobox combobox

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