Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Массив указателей на функции DWORD WINAPI


Автор: popovda 28.5.2008, 19:26
Нужно создать несколько потоков, для чего как известно в CreateThread передается указатель на функцию. Но у меня таких функций несколько - и есть желание объявить массив указателей на функции, чтобы в цикле передавать его элементы. Попытался так:

Прототип функции
DWORD WINAPI Func(void* );

......
Код

//Объявляю тип
typedef DWORD WINAPI (*Func)(void*) PF; 
//И массив
PF pFuncs[N]


Следует ругань на такое объявление. : syntax error : '('

Однако, например, 

Код

//Объявляю тип
typedef int (*Func)(void*) PF; 
//И массив
PF pFuncs[N]


работает. Но это не то, что нужно. Как определить указатель на такие функции?

Автор: Rififi 28.5.2008, 19:40
Код
DWORD WINAPI ThreadProc(LPVOID);

typedef DWORD (WINAPI *funcptr_t)(LPVOID);

funcptr_t fp = &ThreadProc;

Автор: popovda 28.5.2008, 21:43
Тьфу, пропасть. Конечно же! Вот что значит кодить на WinAPI только семестр (даже программированием язык назвать не поворачивается). Я пробовал скобки, но не так. И lpvoid - логично. Всё не как у людей в Linux:)

Спасибо ОГРОМНОЕ!!!!!!!!!!!!!

Автор: Lazin 29.5.2008, 10:09
Цитата(popovda @  28.5.2008,  21:43 Найти цитируемый пост)
даже программированием язык назвать не поворачивается

WinAPI - это не язык а божья кара интерфейс для программирования Windows приложений, в принципе там все понятно и логично smile 

Автор: popovda 29.5.2008, 13:58
Я не про WinAPI, а про свои знания о нём. Ибо в течении семестра на втором курсе я его изучал, а потом забыл, так как лично мне не по душе было сист. программирование под виндовс. А, если учесть, что это было 5, нет, 6 лет назад, то понять меня можно. 

Автор: jonie 30.5.2008, 22:18
только как связано незнание языка и winapi никто не узнает...

Автор: popovda 31.5.2008, 05:55
Язык C (да и С++) я знаю. Причём весьма неплохо, раз системным и прикладным (мат. моделирование) программированием под Linux кормлюсь. Опять же весьма неплохо кормлюсь. А вот ковыряться в объявлениях WinAPI и тратить своё драгоценное время на изучение того иснструментария, с которым я вообще не работаю - совсем не желаю. Тем более, что в нашей стране опытных программистов, работающих с WinAPI весьма много, значит и ответ на вопрос я получил бы быстрее, чем сам копался. Так и вышло - не успел кофе допитьsmile Обратите внимание на время вопроса и время ответа.  А хороший программист - это разумный программист, не пишущий лишнего кода, и умеющий пользоваться справочной информациейsmile В том числе опытом и советом более опытных программистов.

Правда, когда дали ответ - очевидный ответ, вспомнилось из Петзольда, что 

#define WINAPI __callback

Соответственно, скобочки надо было там поставитьsmile  

Автор: ppoger 31.5.2008, 14:05
2popovda
неа, 
#define WINAPI __stdcall smile собсна как и  #define CALLBACK __stdcall

Автор: jonie 31.5.2008, 14:30
Цитата

Язык C (да и С++) я знаю. Причём весьма неплохо, раз системным...
А хороший программист - это разумный программист, не пишущий лишнего кода, и умеющий пользоваться справочной информацией...
вот именно этого я и не заметил. что вы и подтвердили своим постом) видимо у нас разные понтия о "неплохих знаниях С\С++"

Автор: popovda 2.6.2008, 14:36
Хе-хе. 
Цитата

2popovda
неа, 
#define WINAPI __stdcall smile собсна как и  #define CALLBACK __stdcall 

Ну да. Опечатался. И не сразу это заметил.

Так я Вами и воспользовалсяsmile Задача решена, клиент доволен. 

И не передергивайте. Я писал:
Цитата

А хороший программист - это разумный программист, не пишущий лишнего кода, и умеющий пользоваться справочной информациейsmile В том числе опытом и советом более опытных программистов.


Я же сказал, что ради решения простой задачи я не собираюсь в исходнике или Петзольде копаться (а уж ставить Visual Studio и MSDN - тем более. Хотя, беспорно, VC - шикарная ИСР, там знаток кода и подсказки решают часть проблем), так как WinAPI мне впервые за 5 лет понадобилось и всего в одном месте произошёл затык. А раз я получил ответ на свой вопрос, то напрягать свою голову тем, что мне нафиг не нужно в постоянной работе - тратить своё время, которое можно посвятить, например, личной жизни, или хотя бы чашке чая. 

И у нас действительно разные понятия о программировании. Я терпеть не могу кодить. А вот решать сложные задачи оптимальными методами и инструментами - это другой вопрос.


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