Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запуск потоков в цикле, почемуто не работает :( 
V
    Опции темы
DonPager
  Дата 21.1.2008, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

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



есть два варианта исполнения:
1:
Код


  LastSMPPIndex = -1;
  randomize();
  sgenrand(time(NULL));
  TWriteThread *pWrite;

  for(int i=0;i<7;i++){
    pWrite = new TWriteThread(true);
    pWrite->Priority = tpLower;
    pWrite->FreeOnTerminate = true;
    hWriteThread = (void*)pWrite->Handle;
    dwWriteBadThreadID = pWrite->ThreadID;
    pWrite->Resume();
  }
//итератор используется только как счётчик

и 2:
Код

  LastSMPPIndex = -1;
  randomize();
  sgenrand(time(NULL));
  TWriteThread *pWrite;

  pWrite = new TWriteThread(true);
  pWrite->Priority = tpLower;
  pWrite->FreeOnTerminate = true;
  hWriteThread = (void*)pWrite->Handle;
  dwWriteBadThreadID = pWrite->ThreadID;
  pWrite->Resume();

  pWrite = new TWriteThread(true);
  pWrite->Priority = tpLower;
  pWrite->FreeOnTerminate = true;
  hWriteThread = (void*)pWrite->Handle;
  dwWriteCustomThreadID = pWrite->ThreadID;
  pWrite->Resume();

  pWrite = new TWriteThread(true);
  pWrite->Priority = tpLower;
  pWrite->FreeOnTerminate = true;
  hWriteThread = (void*)pWrite->Handle;
  dwWriteDumpThreadID = pWrite->ThreadID;
  pWrite->Resume();

  pWrite = new TWriteThread(true);
  pWrite->Priority = tpLower;
  pWrite->FreeOnTerminate = true;
  hWriteThread = (void*)pWrite->Handle;
  dwWriteSMPPThreadID = pWrite->ThreadID;
  pWrite->Resume();

  pWrite = new TWriteThread(true);
  pWrite->Priority = tpLower;
  pWrite->FreeOnTerminate = true;
  hWriteThread = (void*)pWrite->Handle;
  dwWriteMelodyThreadID = pWrite->ThreadID;
  pWrite->Resume();

  pWrite = new TWriteThread(true);
  pWrite->FreeOnTerminate = true;
  hWriteThread = (void*)pWrite->Handle;
  dwSizeFileThreadID = pWrite->ThreadID;
  pWrite->Resume();

  pWrite = new TWriteThread(true);
  pWrite->FreeOnTerminate = true;
  hWriteThread = (void*)pWrite->Handle;
  dwWriteManualThreadID = pWrite->ThreadID;
  pWrite->Resume();


:( и хоть убей не могу понять почему первый вариант НЕ работает, в то время как второй прекрасно работает...
 smile 
pWrite - поток записи сообщений в файл и под словом "не работает" я имею в виду что при срабатывании очередного события запись не записывается в файл


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
Lazin
Дата 21.1.2008, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



Разницы не должно быть...
возможно дело в коде TWriteThread

Добавлено через 32 секунды
вероятно это deadlock
PM MAIL Skype GTalk   Вверх
ama_kid
Дата 21.1.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


АСУТП-кодер
***


Профиль
Группа: Комодератор
Сообщений: 1460
Регистрация: 5.3.2007
Где: Москва

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



код конструтора надо посмотреть

Это сообщение отредактировал(а) ama_kid - 21.1.2008, 12:36


--------------------
самурай без меча подобен самураю с мечом, но только без меча 
PM MAIL   Вверх
DonPager
Дата 21.1.2008, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

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



вот тупо код потоков (конструктор стандартный)
Код

__fastcall TWriteThread::TWriteThread(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TWriteThread::Execute()
{
  MSG mess;
  char *pText;
  char *pFileName;
  FILE *log;
  AnsiString Text;
  LARGE_INTEGER liSize;
  HANDLE hFile;

  while (GetMessage(&mess, NULL, 0, 0))
  {
    try
    {
      switch (mess.message)
      {
        case WM_WRITEBADREQ:
          pText = (char*)mess.wParam;
          log  = fopen(BadRequestsFile.c_str(), "a");
          if (log != NULL)
          {
            Text = pText;
            Text = FormatDateTime("dd.mm.yyyy hh:nn:ss", Now())+" "+Text;
            fprintf(log, Text.c_str());
            fclose(log);
          }
          delete[] pText;
          break;
        case WM_WRITECUSTOM:
          pText = (char*)mess.wParam;
          pFileName = (char*)mess.lParam;
          log  = fopen(pFileName, "a");
          if (log != NULL)
          {
            Text = pText;
            Text = FormatDateTime("dd.mm.yyyy hh:nn:ss", Now())+" "+Text;
            fprintf(log, Text.c_str());
            fclose(log);
          }
          delete[] pText;
          delete[] pFileName;
          break;
        case WM_WRITEDUMP:
          pText = (char*)mess.wParam;
          pFileName = (char*)mess.lParam;
          log  = fopen(pFileName, "a");
          if (log != NULL)
          {
            Text = pText;
            Text = FormatDateTime("dd.mm.yyyy hh:nn:ss", Now())+" "+Text;
            fprintf(log, Text.c_str());
            fclose(log);
          }
          delete[] pText;
          delete[] pFileName;
          break;
        case WM_WRITESMPP:
          pFileName = (char*)mess.lParam;
          pText = (char*)mess.wParam;
          log  = fopen(pFileName, "a");
          if (log != NULL)
          {
            Text = pText;
            Text = FormatDateTime("dd.mm.yyyy hh:nn:ss", Now())+" "+Text;
            fprintf(log, Text.c_str());
            fclose(log);
          }
          delete[] pText;
          delete[] pFileName;
          break;
        case WM_WRITEMELODY:
          pText = (char*)mess.wParam;
          pFileName = (char*)mess.lParam;
          log  = fopen(pFileName, "a");
          if (log != NULL)
          {
            Text = pText;
            Text = FormatDateTime("dd.mm.yyyy hh:nn:ss", Now())+" "+Text;
            fprintf(log, Text.c_str());
            fclose(log);
          }
          delete[] pText;
          delete[] pFileName;
          break;
        case WM_WRITEMANUAL:
          pText = (char*)mess.wParam;
          pFileName = (char*)mess.lParam;
          log  = fopen(pFileName, "a");
          if (log != NULL)
          {
            Text = pText;
            Text = FormatDateTime("dd.mm.yyyy hh:nn:ss", Now())+" "+Text;
            fprintf(log, Text.c_str());
            fclose(log);
          }
          delete[] pText;
          delete[] pFileName;
          break;
        default:
          break;
      }
    }
    catch(...)
    {
      LogEvent("Èñêëþ÷åíèå â ðàáîòå ïîòîêà log-ôàéëîâ", 1);
    }

  }
}




--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
DonPager
  Дата 21.1.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Колдырь
**


Профиль
Группа: Участник
Сообщений: 327
Регистрация: 28.3.2003
Где: Воронеж

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



smile блин малёк переработал - утро понедельника млин smile  smile 
если немного внимательнее смотреть то код вверху и внизу РАЗНЫЙ


--------------------
кодер + лодырь = колдырь
PM MAIL ICQ Skype GTalk   Вверх
dumb
Дата 21.1.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



да, да. dwWriteBadThreadID != dwWriteBadThreadID, dwWriteCustomThreadID...dwWriteManualThreadID.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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