В чем разница между функцией класса и глобальной функцией в отношении указателей на функции в C ++? Я спрашиваю, поскольку метод Windows CreateThread, похоже, не принимает функцию, в которую входит код потока, если функция является членом класса.
Я могу передать функцию (в которую входит код потока) в сообщение CreateThread, когда это глобальный метод, но как только я сделаю его членом класса, я получаю ошибку «аргумент типа [макет метода] несовместим с параметром типа LPTHREAD_START_ROUTINE «. ClassName :: * теперь находится посередине; это влияет на это?
Как это обойтись?
лямбда-выражения в C ++ 11 или boost :: bind перед этим — опубликуйте ошибочный код, и мы покажем вам, как — person Ghost schedule 14.08.2013
Сигнатура возможных потоковых функций должна быть точно согласована, Win32-API — это чистый C API, не предназначенный для работы с C ++ — классами. — person Ghost schedule 14.08.2013
@doctorlove, результат не будет совместим с указателем на функцию, взятым CreateThread. — person Ghost schedule 14.08.2013
В C ++ 11 вы можете подумать о переходе на стандартную библиотеку потоковой передачи. Тогда это что-то вроде thread([this]{member();}), а не тарабарщина в правильном ответе, с переносимостью в качестве бонуса. — person Ghost schedule 14.08.2013
@MikeSeymour, Хорошая мысль, я не знаю, почему это не пришло мне в голову. Я поставлю это на видное место. — person Ghost schedule 14.08.2013
Источник: