Здравствуйте, Аноним, Вы писали:
А>Возможно ли использовать в качестве рабочей функции потока метод класса:
А>unsigned __stdcall MyClass::StreamFunction(void* p) А>{ А>// ... А> return 0; А>}
А>MyClass::MyClass() А>{ А>// ... А> unsigned nIdStream = 0; А> HANDLE handleStream = (HANDLE) _beginthreadex(NULL, 0, MyClass::StreamFunction, this, 0, &nIdStream);
А> return; А>}
А>компилятор на это ругается: А>С2664: cannot convert parameter 3 from 'unsigned int(void*)' to 'unsigned int(__stdcall*)(void*)'
А>буду благодарен за совет...
В объявлении функции в классе укажи static.
Здравствуйте, Аноним, Вы писали:
А>Возможно ли использовать в качестве рабочей функции потока метод класса:
Возможно, через обертку.
Используйте статическую функцию класса, которая будет вызывать уже необходимую функцию внутри конкретного класса.
Здравствуйте, Аноним, Вы писали:
А>Возможно ли использовать в качестве рабочей функции потока метод класса?
Можно, но есть две проблемы.
1) Функция потока должна быть статической, с аргументом, а вовсе и не методом без аргументов. Но это различие ведь чисто формальное и можно просто перенаправлять вызов через статический метод. Типа в beginthread или анологичную функцию передаёшь адрес статического метода и this, в качестве аргумента, ну а в методе, как-то проверяешь, что аргумент таки this, приводишь его и зовёшь уже нужный, нестатический.
2) Надо как-то передать объект, метод которого выполняется на другой нити, во владение этой нити, ну или как-то синхронизовать владение, чтоб ожна нить не разрушила объект слишком рано, пока вторая ещё им пользуется.
Решается обычными методами.
Но точно ли тебе такое счастье надо заводить на ровном месте?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: метод класса = функция потока
От:
Аноним
Дата:
06.10.05 07:41
Оценка:
Спасибо
Re[2]: метод класса = функция потока
От:
Аноним
Дата:
06.10.05 07:46
Оценка:
Здравствуйте, Erop, Вы писали:
E>Здравствуйте, Аноним, Вы писали:
А>>Возможно ли использовать в качестве рабочей функции потока метод класса?
E>Можно, но есть две проблемы.
E>1) Функция потока должна быть статической, с аргументом, а вовсе и не методом без аргументов. Но это различие ведь чисто формальное и можно просто перенаправлять вызов через статический метод. Типа в beginthread или анологичную функцию передаёшь адрес статического метода и this, в качестве аргумента, ну а в методе, как-то проверяешь, что аргумент таки this, приводишь его и зовёшь уже нужный, нестатический.
E>2) Надо как-то передать объект, метод которого выполняется на другой нити, во владение этой нити, ну или как-то синхронизовать владение, чтоб ожна нить не разрушила объект слишком рано, пока вторая ещё им пользуется. E>Решается обычными методами.
E>Но точно ли тебе такое счастье надо заводить на ровном месте?
По всей видимости — не надо. Наверно, лучше функцию потока сделать простой функцией, но объявить объявить ее со статической обл. видимости в соответствующем файле