我在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) 我正在使用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) 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,并且大部分时间都是我在网上找到的重复工作示例.
我在MFC项目的MSVC 2010专业版的gui编辑器中添加了一个组合框.我有一个我从外部源获取的字符串列表,并希望将它们添加到我的组合框中.我搜索了一段时间,每个帖子似乎都暗示我需要使用CComboBox类,但是,我不知道如何从gui编辑器中的组合框元素的资源ID获取类变量.
总之,如何使用宏(如CB_ADDSTRING(RESOURCE_ID, "my string");)或使用CComboBOx(类似的东西CComboBox::GetObject(RESOURCE_ID)->AddString("blah");)将字符串添加到我的组合框中.
我没有做很多win32 api/mfc编程,只是开始摆弄它.