Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Открыть новую тему     Написать ответ в эту тему

serhio61

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
hThr=CreateThread(NULL,0,ThrFunc,ARR,0,NULL);

А если их несколько?
Заворачивать всё в ... структуру(?), параметр же в CreateThread один:

Код:
struct data
{
   char stroka1[50];
   int *ARR;
   char *stroka2;
   int *ARR2;
   int VALUE;
};
struct data DATA;
 

И кидать указатель на неё(после её инициализации естественно):
hThr=CreateThread(NULL,0,ThrFunc,&DATA,0,NULL);
 
Как-то так?
 
Добавлено:
Ну, всё попёрло, вопросы... Чёт я того
А память выделять для полей DATA кошёрно как?

Код:
int *tmpARR;
char *tmp_stroka2;
int *tmpARR2;
инициализация(malloc и т.д.) tmpARR, tmp_stroka2, tmpARR2;
и дальше:
DATA.ARR=tmpARR;
DATA.stroka2=tmp_stroka2;
DATA.ARR2=tmpARR2;

Или можно как-то сразу работать с DATA?
 
 
Добавлено:
Ладно, дальше...
А когда освобождать память?
Вот мы отдали ARR в ThrFunc, там что-то происходит...
WaitForSingleObject(hThr, INFINITE)?
Так оно морозит основной поток до выхода из ThrFunc ...
free(ARR) куда?

Всего записей: 105 | Зарегистр. 10-04-2008 | Отправлено: 16:22 31-01-2022 | Исправлено: serhio61, 16:45 31-01-2022
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
serhio61

Цитата:
Так оно морозит основной поток до выхода из ThrFunc

Если WaitForSingleObject находится внутри дочернего потока, с какой стати должен морозиться родительский поток?


----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 09:43 01-02-2022
serhio61

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mr_eoi
Дык память под ARR выделялась в родителе, в нём, по моему разумению, и free-шить надо...
Поток как-то там поизголялся над ARR, закончил своё чёрное дело, у меня родителе изменённый ARR. Я попользовался им в родителе и давай пока : free(ARR).
Мож, конечно, что-то в консерватории(у меня ) не так, но мне так кажется...

Всего записей: 105 | Зарегистр. 10-04-2008 | Отправлено: 11:47 01-02-2022
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
serhio61

Цитата:
Дык память под ARR выделялась в родителе, в нём, по моему разумению, и free-шить надо...  

Планировщик памяти, обычно, глобален в рамках приложения, так что освобождать память совершенно не обязательно в том же потоке.


----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 12:00 01-02-2022
serhio61

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
освобождать память совершенно не обязательно в том же потоке

Учтём.
Но остаётся момент:

Цитата:
Поток как-то там поизголялся над ARR, закончил своё чёрное дело, у меня родителе изменённый ARR. Я попользовался им в родителе

Когда можно пользовать?
Возвращаемся к исходному:

Цитата:
Так оно морозит основной поток до выхода из ThrFunc ...

 

Всего записей: 105 | Зарегистр. 10-04-2008 | Отправлено: 12:50 01-02-2022
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну, тогда разморозить надо с IDRESUME, наверно.
Или он там только так, для виду?
 
Пользовать можно, когда поток закончил работу и оповестил родителя отдельным событием или своей кончиной.
Это и называется синхронизацией потоков.
 
Проще будет, если скажешь, что хочешь сделать.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 13:23 01-02-2022 | Исправлено: ne_viens, 13:25 01-02-2022
serhio61

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
он там только так, для виду?

Да с этим разобрались, я ж писАл. Счётчик крутится-стопорится-крутится...

Цитата:
и оповестил родителя

Вот!

Цитата:
что хочешь сделать

Да вот же:

Цитата:
Больше 15 лет назад......
Потоки ещё тогда хотелось покрутить...

Основные вопросы: см. первый пост этой страницы.
Продублирую:
1. Тут вариантов похоже нет

Цитата:
А если их несколько?
Заворачивать всё в ... И кидать указатель ... Как-то так?

2. А здесь мутновато...

Цитата:
А память выделять для динамических полей DATA кошёрно как? Или можно как-то сразу работать с DATA?

3. Наслаждаться подвисшим из-за WaitForSingleObject(hThr, INFINITE) основным окном родителя?

Цитата:
Вот мы отдали ARR в ThrFunc...Поток поизголялся над ARR... Когда ARR можно пользовать в родителе?

 
P.S. Просто щупаю...

Всего записей: 105 | Зарегистр. 10-04-2008 | Отправлено: 15:21 01-02-2022 | Исправлено: serhio61, 15:23 01-02-2022
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
serhio61

Цитата:
3. Наслаждаться подвисшим из-за WaitForSingleObject(hThr, INFINITE) основным окном родителя?  

Если в основном потоке есть окно с обработкой сообщений, можно в это окно из дочернего потока через PostMessage кинуть маляву по окончании обработки DATA. При этом основной поток не будет тормозиться, как в случае с WaitForSingleObject.


----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 15:46 01-02-2022 | Исправлено: mr_eoi, 15:50 01-02-2022
serhio61

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
через PostMessage кинуть

WM_USER!!!
То, что доктор...
Тогда и память освободить в основном потоке можно.
 
А по динам. полям структуры... Так, как наверху таки правильно?

Всего записей: 105 | Зарегистр. 10-04-2008 | Отправлено: 17:10 01-02-2022
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
serhio61

Цитата:
А по динам. полям структуры... Так, как наверху таки правильно?  

Если максимальные размеры массивов ARR, ARR2 и stroka2 известны заранее, их можно сразу включить в структуру (размер можно взять с запасом, экономия в несколько байт в 21-м веке - несерьёзно) не заморачиваясь отдельным выделением памяти:
Код:
struct data
{
   char stroka1[50];
   int ARR[sizeARR];
   char stroka2[sizeSTROKA2];
   int ARR2[sizeARR2];
   int VALUE;
};
 


----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 18:48 01-02-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
никто не знает случайно как обновить иконки трея, чтоб исчезли "мертвые" иконки, у которых родительский процесс уже умер. нашел два способа, вот чета не могу простой заставить работать. может проще можно сделать.
второй способ тоже не работает. на семерке 64 по крайней мере
 
https://forum.vingrad.ru/topic-152467.html
https://www.manhunter.ru/assembler/484_prinuditelnoe_obnovlenie_ikonok_v_tree.html

Всего записей: 3412 | Зарегистр. 29-03-2016 | Отправлено: 13:02 07-02-2022 | Исправлено: bomzz, 15:18 07-02-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
никто не подскажет как решить проблему с кодировкой при помещении извлечении содержимого буфера обмена (1252)?

Всего записей: 3412 | Зарегистр. 29-03-2016 | Отправлено: 10:12 10-02-2022
mr_eoi



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
bomzz

Цитата:
никто не подскажет как решить проблему с кодировкой при помещении извлечении содержимого буфера обмена (1252)?

А что мешает воспользоваться юникодом (CF_UNICODETEXT)?


----------
Per Aspera Ad Astra...

Всего записей: 2187 | Зарегистр. 10-08-2003 | Отправлено: 10:47 10-02-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
никто не подскажет как раскладку клавиатуры программно сменить?
 
я подскажу вот так invoke ActivateKeyboardLayout,0419h,0

Всего записей: 3412 | Зарегистр. 29-03-2016 | Отправлено: 11:24 10-02-2022 | Исправлено: bomzz, 12:08 12-02-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите какое сообщение надо перехватить о создании нового окна системой?
когда CreateWindow или CreateWindowEx выполнена

Всего записей: 3412 | Зарегистр. 29-03-2016 | Отправлено: 13:18 03-08-2022 | Исправлено: bomzz, 13:22 03-08-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
отпочковали тему чтоб вообще ничего нельзя было спросить

Всего записей: 3412 | Зарегистр. 29-03-2016 | Отправлено: 14:14 19-08-2022
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
bomzz

Цитата:
подскажите какое сообщение надо перехватить о создании нового окна системой?

Я ставил хуки WH_CBT

----------
Разум когда-нибудь победит

Всего записей: 3218 | Зарегистр. 09-02-2003 | Отправлено: 15:13 19-08-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
спаисбо
не знаешь какой хендл возвращает с нулями?
invoke FindWindow,0,0

Всего записей: 3412 | Зарегистр. 29-03-2016 | Отправлено: 15:59 19-08-2022 | Исправлено: bomzz, 16:00 19-08-2022
Smitis



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
bomzz

Цитата:
не знаешь какой хендл возвращает с нулями?  

Фиг знает. По логике - первое попавшееся окно (первый ноль - любой класс, второй ноль - любой заголовок).

----------
Разум когда-нибудь победит

Всего записей: 3218 | Зарегистр. 09-02-2003 | Отправлено: 22:34 19-08-2022
bomzz

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Smitis
ну не любой, параметр игнорируется.
по логике что она может возвращать с нулями,
если у всего другого есть свои хендлы и константы

Всего записей: 3412 | Зарегистр. 29-03-2016 | Отправлено: 18:39 21-08-2022
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование с использованием WinAPI


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru