Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/22: Рейтинг темы: голосов - 22, средняя оценка - 4.95
29 / 29 / 2
Регистрация: 06.04.2012
Сообщений: 78

Потоки - передача параметров

02.06.2012, 14:58. Показов 4817. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста разобраться с потоками. Нужно реализовать передачу параметров с одного потока в другой. например: Основной поток получает какие-то данные введёны с клавиатуры, и передаёт второму потоку, который в свое время сортирует данные и записывает в файл.
Никак не могу догнать потоки, да и литературы нормальной на эту тему не нашел. Помогите пожалуйста кто знает.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.06.2012, 14:58
Ответы с готовыми решениями:

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

передача параметров
подскажите как из одной формы передать переменную int в другую

Передача 2-х параметров
Всем привет! Как передать другой программе 2 параметра, один параметр я передавал таким образом: ...

7
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
02.06.2012, 15:10
Параметры имеют только функции и просто так передавать их нельзя, да вне вызова функции ты их и не имеешь и передавать нечего.
0
29 / 29 / 2
Регистрация: 06.04.2012
Сообщений: 78
02.06.2012, 15:16  [ТС]
А как реализовать общение между потоками, чтоб в одном потоке, мог вызвать функцию другого потока?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
02.06.2012, 15:38
завести глобальные переменные видимые из обоих потоков. для того что бы не разрушить переменные завести критическую секцию. для доступа к переменным один из потоков блокирует секцию, делает свое дело, освобождает секцию. вместо глобальных переменных можно передавать в поток при создании в одном из параметров указатель на структуру с переменными. механизм доступа к структуре такой же - одно из полей должно быть критической секцией.

Добавлено через 2 минуты
...это если WinAPI-потоки.

Добавлено через 45 секунд
...хотя для всех остальных общий смысл такой же, просто могут быть специфические свистелки.
0
29 / 29 / 2
Регистрация: 06.04.2012
Сообщений: 78
02.06.2012, 15:42  [ТС]
Цитата Сообщение от vxg Посмотреть сообщение
завести глобальные переменные видимые из обоих потоков. для того что бы не разрушить переменные завести критическую секцию. для доступа к переменным один из потоков блокирует секцию, делает свое дело, освобождает секцию. вместо глобальных переменных можно передавать в поток при создании в одном из параметров указатель на структуру с переменными. механизм доступа к структуре такой же - одно из полей должно быть критической секцией.
А можете пожалуйста написать простенький код в виде примера. Если не сложно конечно...
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
02.06.2012, 16:02
Можно и не заводить ни каких секций, если переменные имеют скалярные типы, самостоятельные значения и целиком помещаются и в регистр, и в шину, а ни один из потоков не накапливает в них значения постепенно: тогда ни один из потоков всё равно не сможет вклиниться меду двумя операциями с переменной другого потока, пока значение переменной не правильно. Оно может быть просто старым, ну так от этого секция не защитит, поток, который надо придержать, может просто успеть до захвата секции. Если же это
C++
1
2
3
4
for (int *p=a+n; p>=a; --p)
{
  s+=*p;
}
,
C++
1
2
3
4
for (; n>1; --n)
{
  f*=n;
}
, или
C++
1
2
3
4
5
6
7
for (int *p=a+n; p>=a; --p)
{
  if (m<*p)
  {
   m=*p;
  }
}
и s, f и m - те самые переменные, то придётся секциями. Или если на x64 некоторые из переменных имеют тип uint128_t. Или если две, или более переменных имеют смысл только вместе. Или если это
C++
1
2
3
4
5
6
7
8
class TComplex
{
  public:
   float re, im;
  ...
};
...
TComplex x;
в не зависимости от того, как соотносятся разрядности шины, float и регистра.

Добавлено через 4 минуты
Цитата Сообщение от spenar Посмотреть сообщение
А можете пожалуйста написать простенький код в виде примера.
читай:
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
33
34
35
36
#include <windows.h>
#include <process.h>
#include <stdio.h>
 
CRITICAL_SECTION cs;
int a[ 5 ];
 
void Thread( void* pParams )
{
int i, num = 0;
 
while ( TRUE )
{
EnterCriticalSection( &cs );
for ( i = 0; i < 5; i++ ) a[ i ] = num;
LeaveCriticalSection( &cs );
num++;
}
}
 
int main( void )
 
{ 
InitializeCriticalSection( &cs );
_beginthread( Thread, 0, NULL );
 
while( TRUE )
{
EnterCriticalSection( &cs );
printf( "%d %d %d %d %d\n", 
a[ 0 ], a[ 1 ], a[ 2 ],
a[ 3 ], a[ 4 ] );
LeaveCriticalSection( &cs );
}
return 0;
}
, взято отсюда.

Добавлено через 2 минуты
Смысл такой: в течении всего времени чтения, или записи всего массива одним потоком второй не может обратиться ни к одному элементу массива.

Добавлено через 54 секунды
Выдача гугла.

Добавлено через 4 минуты
Цитата Сообщение от vxg Посмотреть сообщение
...хотя для всех остальных общий смысл такой же, просто могут быть специфические свистелки.
для всех остальных могут быть свои реализации критических секций и семафоров, возможно с другими именами типов.
0
29 / 29 / 2
Регистрация: 06.04.2012
Сообщений: 78
02.06.2012, 16:12  [ТС]
Цитата Сообщение от taras atavin Посмотреть сообщение
читай:
Дело не в том что я не могу обеспечить защиту данных... Я только начал знакомиться с потоками, и еще не понял как реализовать передачу данных между потока... Предложение с глобальными переменными, это конечно выход. А можно ли как то, без глобальных переменных?
0
Модератор
 Аватар для vxg
3409 / 2180 / 354
Регистрация: 13.01.2012
Сообщений: 8,461
02.06.2012, 17:51
см выше
Цитата Сообщение от vxg Посмотреть сообщение
вместо глобальных переменных можно передавать в поток при создании в одном из параметров указатель на структуру с переменными
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.06.2012, 17:51
Помогаю со студенческими работами здесь

Synchronize Передача параметров
Приветствую. Как передать параметры в функцию вызываемую методом Synchronize? void __fastcall TCheckThread::Execute() { ...

Передача параметров в событие
Есть такой массив TBitBtn *BB1; for(int i=0; i&lt;9; i++) BB1=new TBitBtn (Main); Есть функция void __fastcall...

Передача параметров в поток
Добрый день. Имеется основная форма, где объявлена переменная AnsiString LineMessage. Там же в нее заносится содержание текстового файла....

Передача параметров между потоками
нужна помощь, здесь есть баг найти не могу( Суть задачи: поток в C ++ Builder с передачей параметров первий юніт #include...

Передача параметров в поток и обратно
Есть поток (модуль потока Unit2.cpp) //--------------------------------------------------------------------------- #include...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
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 и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru