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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Внимание! Есть замечания модератора по теме: Название темы должно отражать суть вопроса!
Старый 06.12.2011, 19:57   #1
BEL9ILLI
 
Регистрация: 22.11.2011
Сообщений: 4
По умолчанию Должно быть 3 потока. А диспетчер задач показывает, что потока создано 2

Есть код, он полностью рабочий, но вот когда создаются потоки, то по моему разумению должен создаваться один поток на работу формы, и ещё 2 потока созданные мной, то есть всего 3. А диспетчер задач показывает, что потока создано 2.
Что я сделал не так?

Собственно вызов доп. потоков.
Код:
Procedure TForm1.Timer1Timer(Sender: TObject);
begin
  HThread[0] := CreateThread(nil, 0, @FirstStr, nil,
                             CREATE_SUSPENDED, first_id);
  HThread[1] := CreateThread(nil, 0, @SecondStr, nil,
                             CREATE_SUSPENDED, second_id);
  SetThreadPriority(HThread[0],Thread_Priority_Normal);
  SetThreadPriority(HThread[1],Thread_Priority_Normal);
  ResumeThread(HThread[0]);
  ResumeThread(HThread[1]);
  WaitForMultipleObjects(2, @HThread, True, 500);
  CloseHandle(HThread[0]);
  CloseHandle(HThread[1]);
end;
Исходник в аттаче.
Вложения
Тип файла: rar SHunter (потоки).rar (510.5 Кб, 12 просмотров)
BEL9ILLI вне форума Ответить с цитированием
Старый 06.12.2011, 20:04   #2
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

во-первых, к VCL нельзя обращаться не из основного потока
во-вторых, вот этот код отрабатывает достаточно быстро:

Код:
procedure FirstStr;
Var
  MemoryStatus: MEMORYSTATUSEX;
begin
  Form1.Memo1.Lines.Clear;
  MemoryStatus.dwLength := SizeOf(MEMORYSTATUSEX) ;
  GlobalMemoryStatusEx(@MemoryStatus) ;
  with MemoryStatus do begin
    Form1.Memo1.Lines.Add(IntToStr(dwLength) +
      ' Size of ''MemoryStatus'' record') ;
    Form1.Memo1.Lines.Add(IntToStr(dwMemoryLoad) +
      '% memory in use') ;
    Form1.Memo1.Lines.Add(FloatToStr(ullTotalPhys) +
      ' Total Physical Memory in bytes') ;
    Form1.Memo1.Lines.Add(IntToStr(ullAvailPhys) +
      ' Available Physical Memory in bytes') ;
    Form1.Memo1.Lines.Add(IntToStr(ullTotalPageFile) +
      ' Total Bytes of Paging File') ;
    Form1.Memo1.Lines.Add(IntToStr(ullAvailPageFile) +
      ' Available bytes in paging file') ;
    Form1.Memo1.Lines.Add(IntToStr(ullTotalVirtual) +
      ' User Bytes of Address space') ;
    Form1.Memo1.Lines.Add(IntToStr(ullAvailVirtual) +
      ' Available User bytes of address space') ;
   end;
end;
ну а второй поток, наверно, висит. Так что всё верно.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 06.12.2011, 20:19   #3
BEL9ILLI
 
Регистрация: 22.11.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от veniside Посмотреть сообщение
во-первых, к VCL нельзя обращаться не из основного потока
Надо ли что-нибудь исправить?


Цитата:
ну а второй поток, наверно, висит. Так что всё верно.
Поясните пожалуйста.
BEL9ILLI вне форума Ответить с цитированием
Старый 06.12.2011, 20:26   #4
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

сначала поясните, какой интервал у таймера?
просто второй поток тоже долен быстро отработать, так что у вас должен быть 1 поток
но если у таймера интервал около 1 сек, то у вас постоянно потоки создаются/прибиваются, так что их может быть от 1 до 3 в любое время

> Надо ли что-нибудь исправить?

зависит от того, надо ли вам, чтобы программа работала )
можно поместить работу с VCL в Synchronize(), тогда смысл потоков пропадёт, хотя, если честно, я и сейчас его не вижу ровно никакого )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
диспетчер задач отключен и пропали ярлыки что делать? Лютик17 Безопасность, Шифрование 1 23.05.2011 18:06
Как узнать номер потока из самого потока? GaMeSTeR Помощь студентам 0 03.12.2010 09:50
что должно быть в выходном файле Freedom007 Паскаль, Turbo Pascal, PascalABC.NET 2 16.06.2010 21:02
Что вызывется после Execute у потока? TwiX Общие вопросы Delphi 6 06.05.2010 02:03
свойствах показывает 1,50 гб (хотя должно быть 2, 00 гб) MORFIK Компьютерное железо 21 15.06.2009 04:31