2011-01-12 2 views
0

У меня есть класс SoundManager, который содержит функцию «recordLoop». В конструкторе Soundmanager, я использую этот код:Проблема с вызовом функции функции _begintheadex

recordHandle = (HANDLE)_beginthreadex(NULL,0,recordLoop, 
     (void*)exinfo->length,CREATE_SUSPENDED,0); 

Это дает мне следующие ошибки:

error C3867: 'SoundManager::recordLoop': function call missing argument list; use '&SoundManager::recordLoop' to create a pointer to member 
    IntelliSense: argument of type "unsigned int (__stdcall SoundManager::*)(void *params)" is incompatible with parameter of type "unsigned int (__stdcall *)(void *)" 

Так что я попытался с помощью & Soundmanager :: recordLoop как это было предложено, но это дает мне это:

error C2664: '_beginthreadex' : cannot convert parameter 3 from 'unsigned int (__stdcall SoundManager::*)(void *)' to 'unsigned int (__stdcall *)(void *)' 
    IntelliSense: argument of type "unsigned int (__stdcall SoundManager::*)(void *params)" is incompatible with parameter of type "unsigned int (__stdcall *)(void *)" 

Нельзя ли запустить поток в методе класса или я сделал что-то не так?

Заранее спасибо

EDIT: К сожалению забыл добавить recordLoop>. < здесь:

public: 
unsigned __stdcall recordLoop(void* params); 
+0

Является ли функция recordloop статической и принимает ли она void * в качестве аргумента? – programmer

ответ

3

Это незаконно, чтобы начать нить на члене класса нестатической, так как нет никакого способа для созданной нити, чтобы знать, что this есть.

Каково определение recordLoop?

+0

Я вижу. Спасибо за ответ! – KaiserJohaan

0

У меня была такая же проблема с литьем. Игнорируя все другие проблемы, подобные упомянутому выше, указатель функции должен быть отброшен до (unsigned(__stdcall*)(void*)) в _beginthreadex, независимо от того, какой тип является функцией или каков ее список параметров.

Смежные вопросы