powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблемы организации многпоточного кода
22 сообщений из 22, страница 1 из 1
Проблемы организации многпоточного кода
    #33635563
MaximZaikin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Проблемма такая, даже незнаю с кокого конца начинать.
Пишу программу, точнее уже написал, все работает отлично. Непонравилось лишь одно, в одном месте программы начинается цикл в процессе этого цикла многое происходит в том числе и вывод результатов хода выполнения в ListBox, все бы ничего результаты выводятся но окно подвисает то есть полоса прокрутки становися нерабочей пока цикл неотработает. Вот тут я подумал и решил в месте возникновения цикла организовать новый поток. И вот тут начались мои кошмары. Дело в том что с потоками я до этого не заморачивался, порылся почитал что то уловил что нет ) Вобщем код такой пишу на VC++ 6.0
в месте возниконовения цикла теперь стоит это
hThread = CreateThread( NULL,0,ClientThread,(LPVOID)(&params),0,&dwThreadId);
params это структура она определена чуть выше ее суть заключается в передаче параметров которые необходимы для работы цикла, там есть и составные типы данных и обыкновенные переменные
DataParams* params;
ClientThread это собсвенно цикл.
Так вот когда я пытаюсь заполнить структуру выдается ошибка.
Собственно вопрос, где необходимо определить структуру, в самом классе или можно в любом месте, и где необходимо определить переменную от структуры опять же в классе или в теле функции где будет заполняться структура ? Или может кто то уже с этим сталкивался и может посоветовать алгоритм действий.
Заранее благодарен Максим Заикин.
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635599
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User Interface Threads

The MFC library provides good support for UI threads. You derive a class from CWinThread, and you use an overloaded version of AfxBeginThread to start the thread. Your derived CWinThread class has its own InitInstance function, and most important, it has its own message loop. You can construct windows and map messages as required.

Why might you want a user interface thread? If you want multiple top-level windows, you can create and manage them from your main thread. Suppose you allow the user to run multiple instances of your application, but you want all instances to share memory. You can configure a single process to run multiple UI threads such that users think they are running separate processes. That's exactly what Windows Explorer does. Check it out with SPY++.

Starting the second and subsequent threads is a little tricky because the user actually launches a new process for each copy of Windows Explorer. When the second process starts, it signals the first process to start a new thread, and then it exits. The second process can locate the first process either by calling the Win32 FindWindow function or by declaring a shared data section. Shared data sections are explained in detail in Jeffrey Richter's book.
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635609
MaximZaikin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Странно ) Непомогло ) Но все равно спасибо
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635720
Agent 007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ползуеш сообщение WM_SETREDRAW? Если нет, попробуй. Можно ускорить процес (без наличие второго потока).
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635725
a_shar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MaximZaikin
hThread = CreateThread( NULL,0,ClientThread,(LPVOID)(&params),0,&dwThreadId);
params это структура она определена чуть выше ее суть заключается в передаче параметров которые необходимы для работы цикла, там есть и составные типы данных и обыкновенные переменные
DataParams* params;

если DataParams* params; тогда создание потока будет hThread = CreateThread( NULL,0,ClientThread,(LPVOID)(params),0,&dwThreadId);
А вы где-нить выделяете память под params. Я тоже парился несколько дней назад с потоками, а именно AfxBeginThread, у меня все получилось.
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635742
kolobok0
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximZaikin.....Так вот когда я пытаюсь заполнить структуру выдается ошибка.Собственно вопрос, где необходимо определить структуру, в самом классе или можно в любом месте, и где необходимо определить переменную от структуры опять же в классе или в теле функции где будет заполняться структура ? Или может кто то уже с этим сталкивался и может посоветовать алгоритм действий....

1) как тут писалось выше - рулит книга Рихтера "Windows для проффесионалов". Там разжовано по сути с примерами данная тема (многопоточность).

2) если у Вас выдаёться ошибка в месте заполнения структуры, то енто значит не совсем уж много вещей...а) не правильный указатель, указывающий на деревню бабушки и сработка защиты (как правило) - как следствие.б) не проинициализирован данный указатель...

3) создание потока - это апи функционал. классы там превращаются в указатели на функцию, либо куски кода классов....

4) при запуске потоков необходимо ОБЯЗАТЕЛЬНО отслеживать СИНХРОННЫЕ фазы запуска и останова. Очень актуально при времени жизни программы больше чем поделка "хэйллохты мир". Проявляется как правило при ударных нагрузках на данную систему и комп в частности.

5) при передачи данных между потоками - использовать синхронизирующие, атомарные обьекты ядра (см. Рихтера).

с уважением
(круглый)
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635743
MaximZaikin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Agent007 Нет я используй UpdateWindow();
2 a shar А как же. В функции где стартует поток вот таким вот макаром DataParams* params;
Что значит AfxBeginThread я такую неиспользую )
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635765
MaximZaikin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищ круглый, спасибо за рекомендацию, пойду гляну что там про многопоточность. Но все же вопрос актуален, если есть советы делитесь, тему надо добить сам если узнаю в чем проблемма опишу все нюансы.
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635789
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximZaikin2 Agent007 Нет я используй UpdateWindow();
2 a shar А как же. В функции где стартует поток вот таким вот макаром DataParams* params;
Что значит AfxBeginThread я такую неиспользую )
Не смейся над агентом - он из болгарии, а там язык хоть и славянский, но спряжений и падежей нет. По поводу топика - не тащи в GUI многопоточность из-за одного метода. Используй асинхронный IO, или еще чего. Win32 имеет средства для совершения длительных операций в рамках однопоточного GUI.
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635819
MaximZaikin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да это просто опечатка )
Да в том то и дело что рано или поздно а программу это придется переводить в многопоточность. Кстати никто незнает где Рихтера кучнуть можно ?
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635831
a_shar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Могу рихтера на мыло скинуть.
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635841
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a_sharМогу рихтера на мыло скинуть.
и мне, если не сложно, спасибо
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635845
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximZaikinДа в том то и дело что рано или поздно а программу это придется переводить в многопоточность. Кстати никто незнает где Рихтера кучнуть можно ?
Сначала доделай первую версию программы, тебе остается только пофиксить медленную перерисовку во время тяжелого цикла. Переделывай потом.
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635857
gentleman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей ИльичПо поводу топика - не тащи в GUI многопоточность из-за одного метода. Используй асинхронный IO, или еще чего. Win32 имеет средства для совершения длительных операций в рамках однопоточного GUI.
Присоединяюсь.
Несколько потоков лучше использовать для ускорения некоторых фоновых процессов обработки.(Вот, например, твой цикл разбить на два отдельных подцикла, каждый из которых обрабатывает свою порцию данных в отдельном потоке , если, конечно это нужно).
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635858
MaximZaikin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищ Круглый киньте пожалуйста буду признателен.
Да готова первая версия сообщения выводятся одно за одним в ту же секунду как оно готово, а вот полоса прокрутки виснет, то есть я не могу глянуть что там ниже за сообщения выходят )
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635862
MaximZaikin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет цикл бить на потоки это будет лишним, а вот закинуть его в отдельный поток самое то )
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635864
Фотография Cerebrum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximZaikinТоварищ Круглый киньте пожалуйста буду признателен.
Да готова первая версия сообщения выводятся одно за одним в ту же секунду как оно готово, а вот полоса прокрутки виснет, то есть я не могу глянуть что там ниже за сообщения выходят )
почему бы не использовать, выделение вновь добавленного айтема, по моему это автоматически передвинет полосу прокрутки?
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635875
MaximZaikin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хорошо как вариант принимается. Но так же замирают все кнопки на форме ни одна не работает пока цикл не отработает )
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635919
Фотография Сергей Ильич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вынеси такие длительные операции в отдельную DLL. Там их делай в контексте отдельного треда. Оттуда сообщай основному приложению о ходе процесса с помощью посылки сообщений в окно (PostMessage). Соответственно, методы экспортируемые из DLL должны принимать HWND окна и идентификатор сообщения, который они туда будет посылать по ходу процесса.
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635949
MaximZaikin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хороший совет. Я даже им попытаюсь восползоваться если смогу их вынести в dll, а посему прошу дайте кто нибудь хорошую доку по этому вопросу. Я так понимаю в книге Рихтера все это имеется, прошу выслать на wasihw@mail.ru буду очень признателен.
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33635966
MaximZaikin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все получил спасибо большое
...
Рейтинг: 0 / 0
Проблемы организации многпоточного кода
    #33636106
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hThread = CreateThread( NULL,0,ClientThread,(LPVOID)(¶ms),0,&dwThreadId);

используй _begintrhreadex, тогда crt для конкретного потока будет правильно инициироваться
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Проблемы организации многпоточного кода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]