Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484

CreateThread: возможно ли запустить не статический метод класса?

25.06.2019, 13:47. Показов 4252. Ответов 30
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возможно ли в CreateThread запустить не static процедуру класса?
C++
1
2
clas_s obj;
HANDLE h = CreateThread(0, 0, (LPTHREAD_START_ROUTINE)&obj.FUNCTION, 0, 0, 0);
как-то так
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2019, 13:47
Ответы с готовыми решениями:

Вызов метода из другого класса, при этом нельзя создать объект второго класса и метод не статический
У меня есть 2 класса - один с формой и кнопкой на ней и другой класс, у которого есть метод void Method() Необходимо при нажатии на...

Статический элемент и метод класса
Доброго времени суток, разбираюсь со статическим элементом и методом класса. накидал небольшую програмку, но Visual Studio 2010 ее не...

Написать статический метод класса
Добрый день, подскажите, как можно реализовать данную программу? Требуется написать статический метод класса, вычисляющий функцию,...

30
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
25.06.2019, 17:08  [ТС]
Студворк — интернет-сервис помощи студентам
oleg-m1973, так а разве при принудительном выходе программа не закроектся без ожидания?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
25.06.2019, 17:20
Цитата Сообщение от ReYalp Посмотреть сообщение
oleg-m1973, так а разве при принудительном выходе программа не закроектся без ожидания?
Если ты сделаешь процессу kill, то закроется. Если ты штатно останавливаешь процесс, т.е. закрываешь главное окно или делаешь Ctr+C, то процесс должен подождать пока завершатся все его потоки.

Добавлено через 8 минут
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Если ты штатно останавливаешь процесс, т.е. закрываешь главное окно или делаешь Ctr+C, то процесс должен подождать пока завершатся все его потоки.
Вернее - будет лучше, если ты подождёшь, пока завершаться все твои потоки перед тем как сделать return из функции main. Сам по себе процесс не будет ничего ждать, закроет их и всё
1
Неэпический
 Аватар для Croessmah
18146 / 10730 / 2066
Регистрация: 27.09.2012
Сообщений: 27,029
Записей в блоге: 1
25.06.2019, 17:26
Цитата Сообщение от ReYalp Посмотреть сообщение
а что делать в этом случае?
Ваш процесс не просто так убить хотят. Смиритесь.
2
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.06.2019, 03:18
Цитата Сообщение от DrOffset Посмотреть сообщение
Потому что void * p в общем случае не обязан быть такого же размера, что и class_s * ps.
пруф?
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
26.06.2019, 08:52
Цитата Сообщение от hoggy Посмотреть сообщение
пруф?
Драфт С 2011:
6.2.5 Types
...
28 A pointer to void shall have the same representation and alignment requirements as a pointer to a character type.48) Similarly, pointers to qualified or unqualified versions of compatible types shall have the same representation and alignment requirements. All pointers to structure types shall have the same representation and alignment requirements as each other. All pointers to union types shall have the same representation and alignment requirements as each other. Pointers to other types need not have the same representation or alignment requirements.
_____
48) The same representation and alignment requirements are meant to imply interchangeability as arguments to functions, return values from functions, and members of unions.
В стандарте С об этом вообще прямым текстом написано.
Подробности в C FAQ: http://c-faq.com/null/machexamp.html
Дополнительно выделил очень ценное пояснение48) о том, что совместимость представления и требований к выравниванию означает для аргументов функции. Совершенно очевидно, что мы не можем закладываться на такую совместимость в случае с void * и остальными указателями.

В стандарте С++: http://eel.is/c++draft/basic.compound#5
A pointer to cv-qualified ([basic.type.qualifier]) or cv-unqualified void can be used to point to objects of unknown type.
Such a pointer shall be able to hold any object pointer.
An object of type cv void* shall have the same representation and alignment requirements as cv char*.
меньше конкретики, но все равно to hold, как видно из текста, не означает при этом то же representation и alignment requirement, что и у остальных указаталей.
3
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.06.2019, 14:55
Цитата Сообщение от DrOffset Посмотреть сообщение
В стандарте С об этом вообще прямым текстом написано.
Цитата Сообщение от DrOffset Посмотреть сообщение
6.2.5 Types
...
28 A pointer to void shall have the same representation and alignment requirements as a pointer to a character type.48) Similarly, pointers to qualified or unqualified versions of compatible types shall have the same representation and alignment requirements. All pointers to structure types shall have the same representation and alignment requirements as each other. All pointers to union types shall have the same representation and alignment requirements as each other. Pointers to other types need not have the same representation or alignment requirements.
здесь же черным по белому написано,
что void* и вообще все указатели на данные
имеют те же требования, что и char*,
не?

Цитата Сообщение от DrOffset Посмотреть сообщение
Совершенно очевидно, что мы не можем закладываться на такую совместимость в случае с void * и остальными указателями.
не очевидно, с чего ты взял свою очевидность.

под "остальные типами" :
Цитата Сообщение от DrOffset Посмотреть сообщение
Pointers to other types need not have the same representation or alignment requirements.
подразумеваются те разновидности указателей,
что не были перечислены выше по тексту.

то бишь такие указатели, которые не являются:
Цитата Сообщение от DrOffset Посмотреть сообщение
pointer to void
Цитата Сообщение от DrOffset Посмотреть сообщение
pointer to a character type.
Цитата Сообщение от DrOffset Посмотреть сообщение
All pointers to structure types
Цитата Сообщение от DrOffset Посмотреть сообщение
All pointers to union types
таким образом, "остальные типы" - это например, указатель-на-функцию-член.
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
26.06.2019, 15:16
Цитата Сообщение от hoggy Посмотреть сообщение
вообще все указатели на данные
Где именно выделенное написано?

Собственно твои возражения никак ничего не меняют. В стандарте написано, что указатели на структуры все между собой имеют одинаковое внутреннее представление, но не написано, что указатели на void имеют такое же внутреннее представление, что и указатели на структуры или любые другие типы. Единственное что написано, что он имеет такое же внутреннее представление, что и указатель на char.
А формулировка "способен хранить" не накладывает никаких требований на одинаковое при этом внутреннее представление, что подтверждается примерами из C FAQ.
1
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.06.2019, 15:39
Цитата Сообщение от DrOffset Посмотреть сообщение
Где именно выделенное написано?
может быть я перевожу коряво.

вот здесь:
Цитата Сообщение от DrOffset Посмотреть сообщение
Similarly, pointers to qualified or unqualified versions of compatible types shall have the same representation and alignment requirements.
"совместимые указатели, пофигу на квалификатор, имеют одинаковые требования"

важна формулировка:
одинаковые требования для всей группы.

вот здесь:
Цитата Сообщение от DrOffset Посмотреть сообщение
All pointers to structure types shall have the same representation and alignment requirements as each other.
"все указатели на объекты-структур должны иметь те же требования, как и для других"

"как и для других" - выше описанных.
это вытекает из контекста.
не?

здесь не сказано, что для всех указателей-на-объекты-структур одинаковые требования.
здесь сказано, что для всех указателей-на-объекты-структур требования такие же,
как и для прочих (выше описанных, что вытекает из контекста) типов.
0
19497 / 10102 / 2461
Регистрация: 30.01.2014
Сообщений: 17,808
26.06.2019, 16:36
Цитата Сообщение от hoggy Посмотреть сообщение
"совместимые указатели, пофигу на квалификатор, имеют одинаковые требования"
Тут не указатели совместимы, а типы, на которые он указывает. Т.е. чтобы указатели были совместимы, типы на которые он указывает, тоже должны быть совместимы (и пофигу на квалификатор).

Цитата Сообщение от hoggy Посмотреть сообщение
"все указатели на объекты-структур должны иметь те же требования, как и для других"
Вот как раз что такое each other похоже и является ключевым.
Я считаю, что other - это другие указатели на структуры, а не вообще все указатели. Ты считаешь, что это ссылка на вышеописанные указатели на char* и void*. Если это действительно так, то непонятно зачем так мудрено писать, отдельно выделять структуры, отдельно cv группы совместимых типов, когда можно было написать это одним простым предложением?

Добавлено через 39 минут
hoggy, ладно, давай вообще оставим в покое этот each other, допустим даже, что ты верно понял, а я нет.

Но все равно, вот читаем:
Similarly, pointers to qualified or unqualified versions of compatible types shall have the same representation and alignment requirements.
1) Типы должны быть совместимыми, чтобы указатели могли считаться совместимыми.
Теперь такой вопрос: int, например, и double - это совместимые типы? Нет (надеюсь с этим-то никто спорить не станет).
значит эта ситуация попадает под other types == (несовместимые типы и не структуры и не объединения), поэтому идем в конец и читаем:
Pointers to other types need not have the same representation or alignment requirements.
получается, что как минимум int и double могут не иметь совместимых по представлению и выравниванию указателей, а значит что как минимум один из них в этом случае не может быть совместимым с указателем на void.

2) Теперь допустим, что ты понял верно и все указатели на структуры совместимы между собой и совместимы с void*, а также все указатели на совместимые типы (пофигу на квалификатор) совместимы между собой и совместимы с void*. И? Это потребовало бы и от double* быть совместимым с void* и от int* ,быть совместимым с void*. double и double const совместимы между собой? да. если ты прав, они также совместимы и с void*. int и int const совместимы между собой? да. если ты прав, они также совместимы и с void*. И дальше у нас логическое противоречие возникает на основании пункта 1), нет? Твоя логика строилась на том, что other types - это обязательно функции, но, как оказалось, нет.
2
285 / 176 / 21
Регистрация: 16.02.2018
Сообщений: 666
26.06.2019, 17:15
Цитата Сообщение от hoggy Посмотреть сообщение
таким образом, "остальные типы" - это например, указатель-на-функцию-член.
В C11 появились функции-члены?
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
26.06.2019, 18:43
Цитата Сообщение от DrOffset Посмотреть сообщение
Тут не указатели совместимы, а типы, на которые он указывает
действительно.
Цитата Сообщение от DrOffset Посмотреть сообщение
Вот как раз что такое each other похоже и является ключевым.
Я считаю, что other - это другие указатели на структуры, а не вообще все указатели. Ты считаешь, что это ссылка на вышеописанные указатели на char* и void*. Если это действительно так, то непонятно зачем так мудрено писать, отдельно выделять структуры, отдельно cv группы совместимых типов, когда можно было написать это одним простым предложением?
я тоже подумал, что "each other" может означать "другие указатели-на-структуры".
но тогда, - подумал я, - почему фраза такая мудреная?
если имеется ввиду группа указателей-на-структуры,
почему так сложно?
можно же было записать попроще,
по аналогии с совместимыми типами?
Кликните здесь для просмотра всего текста
Similarly, all pointers to structure types shall have the same representation and alignment requirements.


однако, пожалуй, я с тобой соглашусь:
в твоих рассуждениях больше здравого смысла.
а значит, скорее всего ты прав))
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.06.2019, 18:43
Помогаю со студенческими работами здесь

Как объявить статический метод класса?
выдает ошибку на 11 16 19 строку((((((( #include <iostream> using namespace std; class Sop { private: short int kol; ...

По какому объекту синхронизируется статический метод класса?
Если мы синхронизируем не статический метод, то он синхронизируется по "своему" объекту. А если мы синхронизируем статический метод,...

Как передать нестатическое поле в статический метод класса?
есть статическая фукция static LRESULT CALLBACK WndProc ( HWND,UINT,WPARAM,LPARAM); в ней нужно использоавть поля класса, вопрос -...

Как сделать методы к полям класса и перезапущенную операцию (статический метод)?
В Java я очень чайник, подскажите пожалуйста. Как это сделать? Определите класс "точка", состоящий: - из полей: x, y...

Как рефлексией динамически получить статический метод для класса Convert
Как динамически получить метод для нестатического класса, я уже нашел. Делается что-то типа этого: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru