Проблема вызова функции _begintheadex - PullRequest
0 голосов
/ 12 января 2011

У меня есть класс SoundManager, который содержит функцию с именем 'recordLoop'.В конструкторе SoundManager я использую этот код:

    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 *)"

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

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

РЕДАКТИРОВАТЬ: Извините, забыл добавить цикл записи>. <Здесь это: </p>

 public:
 unsigned __stdcall recordLoop(void* params);

Ответы [ 2 ]

3 голосов
/ 12 января 2011

Запрещается запускать поток для нестатического члена класса , поскольку созданный поток не может узнать, что такое this.

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

0 голосов
/ 27 марта 2015

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

...