Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2011, 22:44   #1
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
Вопрос 2 процеса одновременно..? на Си

например такой код на си:
Код:
#include <stdio.h>

int main ()
{
int a, b;
a = 0;
b = 0;
for (;;)
{
a++;
}
for (;;)
{
b++;
}
return 0;
}
как зделать чтобы эти 2 цикла работали одновременно??? на си...
зарание квадрильйон СПС, это меня давно мучает.


и ещё одно, как зделать чтобы програма зупускалась в скрытом режиме? (под линукс, виндовс (если есть разница))
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 29.03.2011, 23:29   #2
.pixel
c++, dx/ogl
Форумчанин
 
Аватар для .pixel
 
Регистрация: 10.11.2008
Сообщений: 131
По умолчанию

Код:
#include <Windows.h>
#include <stdio.h>

// второй поток
DWORD WINAPI func(void* p)
{
  int t=0;
  
  while(1)
  {
    if (t<GetTickCount())
    {
      // как часто заходить в блок кода ( 0.5 сек )
      t=GetTickCount()+500; 
      printf("second thread\n");
    }
  }
  return 0;
}

// основной поток (первый)
int main(int argc, char* argv[]) 
{
  HANDLE h;
  int t=0;
  
  h = CreateThread(NULL,0,func,NULL,0,0);
    
  while(1)
  {
    if (t<GetTickCount())
    {
      // как часто заходить в блок кода ( 1 сек )
      t=GetTickCount()+1000;
      printf("first thread\n");
    }
  }
  getch();

  return 0;  
}
“Batch, Batch, Batch:” What Does It Really Mean?
I am a donut! Ask not how many tris/batch, but
rather how many batches/frame!
.pixel вне форума Ответить с цитированием
Старый 29.03.2011, 23:59   #3
Акоб
Форумчанин
 
Регистрация: 10.01.2011
Сообщений: 243
По умолчанию

Но если я правильно понимаю, то это не совсем паралельно.Он пол секунды будет выполнять одну функцию и пол секунды другую.Насколько я понимаю сдесь нужно работать с патоками.
Акоб вне форума Ответить с цитированием
Старый 30.03.2011, 00:32   #4
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

да, работать оно чисто одновременно не будет, но это уже что-то. большое спс.
а как чисто одновременно зделать?
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 30.03.2011, 01:04   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Насколько я понимаю сдесь нужно работать с патоками.
а там с чем работа?
просто сделано ожидание до вывода текста, но ожидание активное, что равносильно работе потока.

да и вообще на одноядерном проце настоящая(а не псевдо) параллельность невозможна.

так что пример хороший, заменяете на свой код и все одновременно будет работать(а если на двух ядернике, то еще и распределится по ядрам поидее)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 30.03.2011 в 01:07.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.03.2011, 01:38   #6
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

понятно, значит это оптимальный способ, а где можна почитать теорию потоков (мож ещё чёт интересное там найду) (отвечать если знаете, гуглить не надо!)
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 30.03.2011, 01:41   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а что именно по потокам вам надо?
создание потока это CreateThread.
там просто идут под темы такие как синхронизация, общие ресурсы потоков и тп.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.03.2011, 02:04   #8
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
а что именно по потокам вам надо?
создание потока это CreateThread.
там просто идут под темы такие как синхронизация, общие ресурсы потоков и тп.
ну мне интересно техническая часть и как приизводится деление в 2-х ядерном компе (теория)
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 30.03.2011, 03:37   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

деление производится Windows'ом.
алгоритм распределения они не документируют, но тем не менее некоторые подробности можно почитать например у Рихтера.
Цитата:
интересно техническая часть
на низком уровне?
http://programmersforum.ru/showthread.php?t=144416
к этой теме относится я так понимаю?
если да то вперед читать маны интела, а вообще у каждого ядра есть TSS регистр которых хранит текущую задачу, а ядро само(обычно) грузит нужную.(например по таймерам там меняет и тп)
еще Танембаума можете почитать по этой теме.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.03.2011, 05:43   #10
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Код:
if (t<GetTickCount())
    {
      // как часто заходить в блок кода ( 0.5 сек )
      t=GetTickCount()+500;
жэсть. А Sleep(500) уже не модно?
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программное завершение процеса Vladya Помощь студентам 2 07.05.2010 15:51
Ускорение процеса проверки данных! $T@LKER БД в Delphi 0 25.04.2010 02:03
Путь к файлу, по имени процеса Sensizu Win Api 5 10.12.2009 13:42
Проверка и востанавление процеса %( Pirotexnik Общие вопросы Delphi 5 27.03.2009 14:27
Завершение процеса aesoem Общие вопросы Delphi 10 28.08.2008 16:44