Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/8: Рейтинг темы: голосов - 8, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 19

Как создавать и управлять потоками в Visual C++ ?

31.01.2014, 17:36. Показов 1801. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, подскажите пожалуйста как создавать и управлять потоками в Visual C++ ? Есть ли какая-нибудб информация новее http://support.microsoft.com/kb/815805/ru ? Мне нужно что-то вроде в одной кнопке создание потока и его старт, в другой пауза потока, в третьей стоп. Моя попытка:
C++
1
2
 Thread^ thread = gcnew Thread( gcnew ThreadStart( ThreadProc() ));
                 thread->Start();
в кнопке старта потока, но мне пишет ошибку. И соотвествено функция
C++
1
2
3
4
5
6
7
8
 void ThreadProc() {
            listBox1->BeginUpdate();
 
            listBox1->Items->Add( String::Format( "Поток работает") );
 
            listBox1->EndUpdate();
 
        }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
31.01.2014, 17:36
Ответы с готовыми решениями:

Как лучше создавать и управлять динамически объектами?
Какие компоненты или типы лучше использовать для работы с динамически создаваемыми компонентами для того, чтобы удобно управлять ими,...

Как создавать программу в Visual studio 2015?
Новичёк, только пробую "Hello World". Пишу после стрелки, через пробел "#include", пишет - недопустимая команда. Пишу ниже " int...

Как в Visual Studio создавать модели, сущности?
Мб кто-то может подсказать какие-н. видеокурсы. Или что-то, что помогла бы разобраться с этой темой. Заранее спасибо

10
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
31.01.2014, 19:58
Я использовал
C++
1
CreateThread
, хотя возможно это и шаг назад
0
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 19
31.01.2014, 20:08  [ТС]
Цитата Сообщение от mustimur Посмотреть сообщение
Я использовал
C++
1
CreateThread
, хотя возможно это и шаг назад
А можно м примером кода? Я до этого момента с потоками на С++ не сталкивался.
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
31.01.2014, 20:31
Оговорюсь сразу мне не надо было управлять потоками я их запускал и ждал окончания:
код запусков потоков выглядел так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
stend *kstend; // stend - моя структура передаваемая в процедуру потока для обработки каждый поток получал свою структуру для обработки
DWORD dwThreadId=0;
bool cr=true;
kstend= (stend*) malloc(sizeof(stend)* (ip));//ip - число потоков
for (i=0;i<ip;i++)//код заполнения структур он как пример для вас не принципиален
{
kstend[i].startp=i*st;
kstend[i].endp = (i==ip-1) ? kg : (i+1)*st-1;
}
for (i=0;i<ip;i++)  
{
cr=((CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE )&rascP, &(kstend[i]), 0, &dwThreadId)!=NULL) & cr); 
numpr++; // глобальная переменная- число запущенных потоков
}           
while (numpr>0)
{
Sleep (100);
}
free(kstend);
код процедуры потока:

C++
1
2
3
4
5
6
7
8
9
10
DWORD rascP(void* pr)
{
stend ksen=*reinterpret_cast<stend*>(pr); //возврат из void моей структуры которую обрабатывал поток
 for (k = ksen.startp; k<=ksen.endp; k++)  
 {
 /*цикл потока*/  
 }
 numpr--;//перед завершением поток уменьшает счетчик на 1  
 return 0;
}
Добавлено через 1 минуту
Я удалил лишнее int k;

Добавлено через 4 минуты
Еще поясню строки 15-18 цикл ожидание окончания потоков
0
0 / 0 / 0
Регистрация: 19.02.2012
Сообщений: 19
31.01.2014, 20:44  [ТС]
Спасибо. Как я понял вы использовали отдельный поток под каждую из структур? Меня интересует несколько иной момент: как создать поток для отдельного метода и все. Простите, ваш пример для довольно-таки сложен т.к. я впервые столкнулся с потоками
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
31.01.2014, 20:47
Цитата Сообщение от MartinSeptim Посмотреть сообщение
Спасибо. Как я понял вы использовали отдельный поток под каждую из структур? Меня интересует несколько иной момент: как создать поток для отдельного метода и все. Простите, ваш пример для довольно-таки сложен т.к. я впервые столкнулся с потоками
Нет структура - это исходные данные для потока были...
Смеяться будете, но это тоже мой первый опыт работы с потоками
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
01.02.2014, 16:14
Для работы с потоками есть функции _beginthreadex(), _endthreadex() (только их нельзя использовать в CLR )
По поводу отличий _beginthreadex() и CreateThread() - см. гл.6 Рихтера.
MartinSeptim, Вам нужен код C++ или C++/CLI ?
0
320 / 225 / 74
Регистрация: 22.11.2013
Сообщений: 867
Записей в блоге: 1
01.02.2014, 16:22
Цитата Сообщение от Alex5 Посмотреть сообщение
MartinSeptim, Вам нужен код C++ или C++/CLI ?
Судя по его примеру:
C++
1
2
3
            listBox1->BeginUpdate();
             listBox1->Items->Add( String::Format( "Поток работает") );
             listBox1->EndUpdate();
ему нужен C++/CLI
0
Каждому свое
 Аватар для Bretbas
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
03.02.2014, 01:33
Есть функция WinAPI CreateThread(...),в качестве параметров которая принимает-структуру защиты потока,размер стека,функция(точка входа потока) и тд.Почитайте о ней в гугле.Возвращает она дескриптор потока,которого мы создали типа HANDLE.Этот дескриптор можно использовать как параметр еще двух функций-приостановка потока(SuspendThread(HANDLE)) и соответственно возобновление потока(ResumeThread(HANDLE)).
думаю это поможет в важей задаче
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 49
04.02.2014, 15:42
MartinSeptim, Может это не то, что Вам надо, использую MFC, вызов потока выглядит так:
C++
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
//**********************
UINT Thread1(LPVOID pParam); // это нужно, если вызов потока находится выше функции потока
//**********************
 
//**********************
void CProbe1Dlg::OnButton1() 
{
    // TODO: Add your control notification handler code here
    //==============================
    // Запуск потока 1-бегунок 1 раз
    AfxBeginThread(                     // Запуск потока 1
        Thread1,                        // функция потока
        this,                           // параметры
        THREAD_PRIORITY_NORMAL          // Indicates normal priority.1
// Это для справки
//      THREAD_PRIORITY_BELOW_NORMAL            // Indicates 1 point below normal priority.
//      HREAD_PRIORITY_LOWEST           // Indicates 2 points below normal priority.
//      THREAD_PRIORITY_ABOVE_IDLE      // Indicates 3 points below normal priority.
//      THREAD_PRIORITY_IDLE                    // Indicates 4 points below normal priority.
        );
//==============================
 
}
**********
// Функция потока выглядит так:
UINT Thread1(LPVOID pParam)
{
........
}
//**********************
 
// Пример в архиве
Вложения
Тип файла: rar Probe1.rar (397.1 Кб, 8 просмотров)
0
0 / 0 / 0
Регистрация: 28.12.2010
Сообщений: 49
05.02.2014, 11:48
C++
1
2
3
4
5
UINT Thread1(LPVOID pParam)
{
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.02.2014, 11:48
Помогаю со студенческими работами здесь

Что такое формы в Visual c++ и как их создавать?
Здравствуйте, помогите девушке, пожалуйста!(( Научите создавать формы на visual c++ объясните где настраивать их дизайн!( У меня есть...

Формы в С++ - как создавать приложения в Visual Studio
Подскажите. много перерыл, но что ничего так и не понял... Начал изучать С++... А как мне потом создавать приложения в Visual Studio?что...

Как создавать отчеты в Visual Studio 2010
Уважаемые гуру программирования ! Я начинающий программист, при помощи Visual Studio 2010 (Visual Basic) создал приложение которое свои...

Как создавать формы для C++/CLI в Visual Studio?
Здравствуйте! необходимо на форме отобразить кнопки, строки, графики и т.п. Хотелось бы воспользоваться аналогом форм у билдера . Но в...

Написать программу, с помощью которой станет возможно создавать мини-соцсети и управлять ими
У меня по java экзамен (онлайн) сейчас 2 дня у меня до конца ( Я пытаюсь написать задание но не могу... Не хватает знаний. Вот подумал -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru