Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Голосования _ На каком языке написан код?

Автор: Altair 11.04.2005 21:39

Отвечаем 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.

Автор: SHnur 11.04.2005 21:43

незнаю
помоему какой-то 32 битный

Автор: klem4 11.04.2005 21:46

BiTurboPascal :D :D :D

шутка.

а я знаю :P :P

Автор: sandman 11.04.2005 21:49

Бейсик :D :D :D

Автор: volvo 11.04.2005 21:54

Очень похоже на BlueBottle... Не оно?

будем считать, что тоже угадал smile.gif
хотя это BlackBox :P

Автор: Altair 11.04.2005 21:59

неа :P :D
(всем, включая скрытых :P )

Автор: Void 12.04.2005 0:35

Oberon или Modula.

Автор: Altair 12.04.2005 0:43

Void, Вы совершенно правы! smile.gif
Это Оберон.