Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > работа с AfxBeginThread


Автор: En_t_end 30.1.2005, 19:32
Чисто ради интереса подметил одну проблемку :
af = new Af;
LPVOID sParam;
af->af_potoc = AfxBeginThread((AFX_THREADPROC)af->af(sParam), (LPVOID)&af->af_out, THREAD_PRIORITY_NORMAL, 0, 0, 0);
GlobalFree(af);

Ну вот smile... обьясняю Af - это какой-то класс - это не важно...
af_potoc, af(), af_out - это всё его члены.
Дык вот smile компилятор ругается на "=" - типа невозможно так обработать член класса...
Кстати сперва ругался на (AFX_THREADPROC)af->af - ну тут всё понятно typdef правда не может использовать прегружаемые функциив таком виде - но я как видите использовал несколько другой вариант - ещё сам незнаю, будет ли работать smile

Знающие приём smile

Автор: En_t_end 31.1.2005, 08:18
Алло ?... как проблему то решить - интересно ведь... почему без использования указателей класс нормально отрабатывает CWinThread = AfxBeginThread(%%%%%%%%).
Почему ?

Автор: En_t_end 1.2.2005, 17:03
?
Я все равно буду держать тему "на верху" smile

Автор: S.A.P. 1.2.2005, 17:30
Какого типа у тебя af_potoc ?

Автор: Adil' 1.2.2005, 18:57
Цитата(En_t_end @ 30.1.2005, 19:32)
af->af_potoc = AfxBeginThread((AFX_THREADPROC)af->af(sParam), (LPVOID)&af->af_out, THREAD_PRIORITY_NORMAL, 0, 0, 0);
Мда, круто! ПисАть код, способом "а главное, чтоб компилятор заткнулся" - очень продуктивно!
У тебя здесь весело получилось:
происходит вызов метода af->af(sParam) (с неициализироанным значением sParam кстати), то значение, что этот метод возвращает, приводится к типу "указатель на функцию типа UINT (*)( LPVOID pParam ); и передается в AfxBeginThread как адрес функции.
З.Ы. Что бы метод класса работал процедурой потока, надо объявить его статическим, и передавать не возвращаемое им значение, а его адрес.




Автор: En_t_end 1.2.2005, 19:06
Цитата
Мда, круто! ПисАть код, способом "а главное, чтоб компилятор заткнулся" - очень продуктивно!

Я не имею такого опыта, как вы многоуважаемый Adil', поэтому я пока придерживаюсь этих принципов. А вот когда программа работает не правильно, вот тогда я копаю и докапываюсь до истины - такой способ уже оправдал себя.
Добавлено @ 19:08
af_potoc - CWinThread.
Добавлено @ 19:14
Я наверное знаю, что надо сделать :
в высокой степени абстракции, я представляю себе это так :
Код

(af->af_potoc) *unnam;
*unnam = AfxBeginThread(................)

Автор: S.A.P. 1.2.2005, 19:26
Цитата(En_t_end @ 1.2.2005, 19:06)
af_potoc - CWinThread.
а должен быть
Код

CWinThread *


Автор: En_t_end 1.2.2005, 19:41
Perchilla
Да я знаю, но ты спросил меня о типе.

Автор: S.A.P. 1.2.2005, 19:44
Ну так действуй, раз знаешь smile . af_potoc должен быть указателем. Или именно это не пашет?

Автор: Adil' 2.2.2005, 11:01
В более низкой степени абстракции:
Код
class Af
{
public:
CWinThread *af_potoc;
DWORD af_out; //пусть будет DWORD
static UINT af(LPVOID);
Af();
};
...
 Af* af=new Af;
 af->af_potoc=AfxBeginThread(Af::af,(LPVOID)&af->af_out);
И никаких насилий над компилятором!

З.Ы.
Цитата(En_t_end @ 1.2.2005, 19:41)
Да я знаю, но ты спросил меня о типе.

CWinThread и CWinThread* это разные типы

З.З.Ы.
En_t_end, твой подход, наверно, работает, только, представляю себе, какой кровью это даётся!
Может лучше MSDN почитывать?

Автор: En_t_end 2.2.2005, 16:42
CWinThread и CWinThread*
Интересно... хммм... надо будет глянуть в MSDN.
"представляю себе, какой кровью это даётся!"
Очень сложно, поэтому я заново начал перечитывать все источники, заново изучаю стеки, сейчас например smile

Автор: Adil' 2.2.2005, 17:19
Цитата(En_t_end @ 2.2.2005, 16:42)
Интересно... хммм... надо будет глянуть в MSDN.
smile Да там, наверно, такое и не написано. Имелось ввиду, что некий тип и указатель на этот тип - это разные типы smile

Автор: Coocky 2.2.2005, 17:24
Цитата
CWinThread и CWinThread*

Цитата
Да там, наверно, такое и не написано. Имелось ввиду, что некий тип и указатель на этот тип - это разные типы
smile
En_t_end Не обижайся это не к тебе-это нащши общие проблемы smile

Автор: En_t_end 2.2.2005, 20:12
"Имелось ввиду, что некий тип и указатель на этот тип - это разные типы"
А дык smile
указатель на этот тип - тип указателя : указатель. // Ну блин smile, а я то думал, что там новый сверхестесвтенный класс.

CWinThread - класс
"Не обижайся это не к тебе-это нащши общие проблемы"
То есть не я один такой smile ?

Автор: Coocky 3.2.2005, 16:57
En_t_end
Цитата
То есть не я один такой

Нет.Просто не у одного тебя запары бывают smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)