IPB
ЛогинПароль:

> На каком языке написан код?
сообщение
Сообщение #1


Ищущий истину
******

Группа: Пользователи
Сообщений: 4 825
Пол: Мужской
Реальное имя: Олег

Репутация: -  45  +


Отвечаем smile.gif если не знаете, так и говорите smile.gif
Код



{...... (код приведен специально без заголовка)}



TYPE
  Item = POINTER TO RECORD
     time: LONGINT;
     thread, num: INTEGER;
     next: Item;
     ballast: ARRAY 100000 OF BYTE;
  END;

CONST
  MaxItemsCount = 1000;
   
VAR
  CriticalSection: WinApi.RTL_CRITICAL_SECTION;
  ItemListFront, ItemListBack: Item;
  items_count: INTEGER;
  t0: LONGINT;
   
PROCEDURE Action(IpParameter: INTEGER): INTEGER;
VAR x: Item; num: INTEGER;
BEGIN
  num := 0;
  WHILE items_count < MaxItemsCount DO
     WinApi.EnterCriticalSection(CriticalSection);
     IF items_count < MaxItemsCount THEN
        NEW(x);
        IF x # NIL THEN
           INC(items_count); INC(num);
           x.time := WinApi.GetTickCount() - t0;
           x.thread := IpParameter;
           x.num := num;
           IF ItemListBack # NIL THEN ItemListBack.next := x END;
           ItemListBack := x;
           IF ItemListFront = NIL THEN ItemListFront := ItemListBack END
        END
     END;
     WinApi.LeaveCriticalSection(CriticalSection);
     WinApi.Sleep(100)
  END;
  WinApi.ExitThread(0); RETURN 0
END Action;

PROCEDURE Main*;
CONST N = 1000;
VAR
  a, i: INTEGER;
  h: ARRAY N OF WinApi.HANDLE;
  t: ARRAY N OF INTEGER;
  x: Item;
BEGIN
  items_count := 0; ItemListFront := NIL; ItemListBack := NIL;
  WinApi.InitializeCriticalSection(CriticalSection);
  t0 := WinApi.GetTickCount();
  FOR i := 0 TO N-1 DO h[i] := WinApi.CreateThread(NIL, 0, Action, i+1, {}, t[i]) END;
  FOR i := 0 TO N-1 DO a := WinApi.WaitForSingleObject(h[i], WinApi.INFINITE) END;
  FOR i := 0 TO N-1 DO a := WinApi.CloseHandle(h[i]) END;
  WinApi.DeleteCriticalSection(CriticalSection);
  StdLog.Ln; StdLog.String('Items count = '); StdLog.Int(items_count); StdLog.Ln;
  x := ItemListFront; i := 1;
  WHILE x # NIL DO
     StdLog.Int(i); StdLog.String(")");
     StdLog.Int(x.thread); StdLog.Int(x.num); StdLog.Int(x.time); StdLog.Ln;
     INC(i); x := x.next
  END;
  ItemListFront := NIL; ItemListBack := NIL;
END Main;

END TestThreads2.


--------------------
Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 22.05.2024 4:48
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name