Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 301
от 08.09.2006, 15:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 355, Экспертов: 35
В номере:Вопросов: 1, Ответов: 1


Вопрос № 54149: Здравствуйте уважаемые эксперты. Вопрос таков. С помощью функции HANDLE CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, SIZE_T dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCr...

Вопрос № 54.149
Здравствуйте уважаемые эксперты.
Вопрос таков. С помощью функции
HANDLE CreateThread(
LPSECURITY_ATTRIBUTES lpThreadAttributes,
SIZE_T dwStackSize,
LPTHREAD_START_ROUTINE lpStartAddress,
LPVOID lpParameter,
DWORD dwCreationFlags,
LPDWORD lpThreadId
);
создаю поток. При этом вызывается некая функция потока DWORD WINAPI ThreadFunc(LPVOID pvParam). Не могли бы вы поподробнее объяснить механизм передачи какой либо переменной в ф-цию потока с помощью 4-го параметра ф-ции CreateThread() - "LPVOID lpParameter".
Когда пытаюсь передать в качестве параметра ссылку на какую-то конкретную переменную, скажем типа DWORD, компилятор выдает ошибку о невозможности приведения типа *unsigned long к *void.
Если это возможно, бросьте какой нить пример или ссылку на готовый исходник.
Заранее благодарен за любую оказанную помощь.
Отправлен: 03.09.2006, 12:10
Вопрос задал: Юра (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Jadd
Здравствуйте, Юра!
Ну правильно компиллер ругается. Дело в том, что есть два вида тайп кастинга (преобразования типов) - явный и неявный. К явным относят преобразования, заданные самим программером, а неявные - это к чему можно преобразовать на стадии компиляции (к примеру char к int всегда неявно преобразуется или int к double.....с оговоркой естессно). Данный случай требует явного приведения передаваемого значения к LPVOID или просто к *void. Вспомните, что тип указатель на void (или просто *void) введен в С++ как средство для передачи (в функцию, например) значений любого типа. Посему выход в Вашем случае - это написать так:

DWORD dwParam;
.............

CreateThread(....., (LPVOID)dwParameter, .....);

Примерно так.

Успехов.
---------
Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал)
Адрес: Санкт-Петербург
WWW: http://www.sport-diary.ru
ICQ: 28260749
----
Ответ отправлен: 03.09.2006, 12:28


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.36 от 06.09.2006
Яндекс Rambler's Top100

В избранное