Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Потоки не хотят работать вместе 
:(
    Опции темы
Kozel
Дата 28.11.2009, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Есть 2 потока. Первый записывает в файл нечетные числа от 1 до 100, второй - читает их из файла и, если число не является простым, удаляет его.
По отдельности работают замечательно, вместе - результат их совместной деятельности непредсказуем.
1 поток:
Код

void __fastcall Ololo::Execute()
{
FILE * fi;
FreeOnTerminate=true;
      do
      {
      Sleep(Form1->TrackBar1->Position);
        if(!Form1->f)
         {
            Form1->f=true;
            fi=fopen("ololo.txt","a+t");
            fprintf(fi,"%i",i);
            if(i<99)fprintf(fi,"\n");
            fclose(fi);
            Form1->f=false;
            Synchronize(UpdMemo);
            i+=2;
            if(i>100) this->Terminate();
         }
      }  //---- Place thread code here ----
      while(!Terminated);
}

2 поток: 
Код
void __fastcall Ololo2::Execute()
{
FILE * fi,*fo;
     int i=0;
    // int k=0;
     do
     {
     Sleep(Form1->TrackBar2->Position);
        if(!Form1->f)
         {
             if (FileExists("ololo.txt")){
             Form1->f=true;
             char  buff[3];
             fi=fopen("ololo.txt","r");
             fo=fopen("out.txt","w");
             for(int j=0;i>j;j++)
             {
                fscanf(fi,"%s",&buff);
                fprintf(fo,buff);
                fprintf(fo,"\n");
             }
             fscanf(fi,"%d",&k);
             if(is_prime(k))
                {
                  i++;
                  itoa(k,buff,10);
                  fprintf(fo,buff);
                  fprintf(fo,"\n");
                }
             else Synchronize(UpdMemo);
         while (!feof(fi))
         {
          fprintf(fo,"\n");
          fscanf(fi,"%s",&buff);
          fprintf(fo,buff);
         }
      fclose(fi);
      fclose(fo);
      MoveFileEx("out.txt","ololo.txt",MOVEFILE_REPLACE_EXISTING);
      Form1->f=false;
      if(k==99) this->Terminate();
      }
    }
   }
   while(!Terminated);
            //---- Place thread code here ----
}

 smile 
могу еще весь проект приложить
PM MAIL   Вверх
Alca
Дата 28.11.2009, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50





--------------------
PM WWW ICQ Skype Jabber   Вверх
mrbrooks
Дата 30.11.2009, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Kozel, есть такое понятие как синхронизация. Об этом много пишут. Корефей - тов. Рихтер со своими трудами.


Alca, Петрович тоже кошерен  smile 
PM MAIL   Вверх
Kozel
Дата 30.11.2009, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



Дык вроде нигде они не должны пересекаться... Даже если использовать Synchronize при обращении к VCL все равно фигня случается
PM MAIL   Вверх
mrbrooks
Дата 30.11.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Kozel @  30.11.2009,  14:27 Найти цитируемый пост)
Даже если использовать Synchronize при обращении к VCL все равно фигня случается 

VCL тут ни причем.

Цитата(Kozel @  30.11.2009,  14:27 Найти цитируемый пост)
Дык вроде нигде они не должны пересекаться... 

А работа с файлом?  smile 
PM MAIL   Вверх
Kozel
Дата 30.11.2009, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 58
Регистрация: 29.11.2007

Репутация: нет
Всего: нет



С файлом по идее должны работать по очереди... Перед началом работы каждый поток проверяет, а не занят ли файл....
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0551 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.