ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

07.06.2009, 21:08
|
|
Постоянный
Регистрация: 05.07.2008
Сообщений: 555
Провел на форуме: 3134311
Репутация:
1467
|
|
Сообщение от zeppe1in
есть длл. длл загружается и запускает поток. этот поток использует глобальный массив. дак вот он его использует всё хорошо работает. дописываю строчку кода и этот массив становится недоступен. похоже это как то связано с размером процедуры потока. проблемму впринципе решил но интерестно в чом прикол был.
Я к сожалению в потоках особо не разобрался, но могу сказать если ты писал под билдером или делфой, скорее всего это результат ошибок этих сред, ну и потом, глобальные переменные это не лучшее решение и тем более массив.
|
|
|

07.06.2009, 22:44
|
|
Познающий
Регистрация: 12.05.2009
Сообщений: 45
Провел на форуме: 255342
Репутация:
28
|
|
Угу... есть такая трабла на Делфи
обычно спасаюсь глобальной переменной crit.. в кажом потоке:
if crit then sleep(10);
crit:=true;
// действия с глоб массивом
crit:=false;
|
|
|

08.06.2009, 00:08
|
|
Reservists Of Antichat - Level 6
Регистрация: 05.03.2007
Сообщений: 1,985
Провел на форуме: 3288241
Репутация:
3349
|
|
Вообще такие вещи делаются через критические секции типа
Код:
var
CS:TRTLCriticalSection; // глобальная переменная
.......
при старте проги делаешь:
InitializeCriticalSection(CS);
.....
в потоках делаешь:
EnterCriticalSection(CS);
тут идут нужные действия.
LeaveCriticalSection(CS);
после выполнения EnterCriticalSection
система приостанавливает все потоки программы и выполняет код который идет далее.
Затем после LeaveCriticalSection система опять разрешает работу других потоков.
т.е. какбы синхронизация но на уровне ядра и просчитана более лучше.
|
|
|

08.06.2009, 00:14
|
|
Новичок
Регистрация: 15.05.2009
Сообщений: 11
Провел на форуме: 7498
Репутация:
0
|
|
Помогите сделать считывание матрицы из текстового файла в данной программе:
Код:
uses crt;
type
PtrStr = ^Str;
Str = array [1..1] of integer;
PtrMatr = ^Matr;
Matr = array [1..1] of PtrStr;
var
matrica: PtrMatr;
razmer, i, j: integer;
procedure CreateMatr;
begin
write ('razmernost matricy: ');
readln(razmer);
getmem(matrica, razmer*SizeOf(PtrStr));
for i:=1 to razmer do
getmem(matrica^[i], razmer*SizeOf(integer));
writeln('vvodim elementy:');
for i:=1 to razmer do
for j:=1 to razmer do
readln(matrica^[i]^[j]);
end;
procedure destroymatrix;
begin
for i:=1 to razmer do
freemem(matrica^[i], razmer*SizeOf(integer));
freemem(matrica, razmer*SizeOf(PtrStr));
end;
procedure otobrajenie;
begin
for i:=1 to razmer do
begin
writeln;
for j:=1 to razmer do
write(matrica^[i]^[j]:5);
end;
writeln;
end;
procedure sortirovka;
var buffer1, buffer2, buffer3: integer;
begin
buffer3:=1;
for i:=1 to razmer do
begin
buffer1:= matrica^[i]^[1];
buffer2:= matrica^[i]^[i];
for j:=0 to razmer-1 do
begin
if matrica^[i]^[j+1] <= buffer1 then
begin
buffer3:=j+1;
buffer1:=matrica^[i]^[j+1];
end;
matrica^[i]^[buffer3]:=buffer2;
matrica^[i]^[i]:=buffer1;
end;
end;
end;
begin
clrscr;
CreateMatr;
otobrajenie;
sortirovka;
otobrajenie;
destroymatrix;
readln;
end.
|
|
|

08.06.2009, 00:53
|
|
Members of Antichat - Level 5
Регистрация: 15.06.2008
Сообщений: 941
Провел на форуме: 5111568
Репутация:
2399
|
|
Agregat, предлагаешь тебе лабу сделать?
Код:
procedure CreateMatr;
var
F : text;
begin
write ('razmernost matricy: ');
readln(razmer);
assign(F,'README');
reset(F);
читаешь пока не eof(F) и записываешь в элемент матрицы
end;
|
|
|

08.06.2009, 01:50
|
|
Участник форума
Регистрация: 12.06.2007
Сообщений: 160
Провел на форуме: 357904
Репутация:
44
|
|
Подскажите как в таком коде сделать чтоб было возможно вводить только целые числа больше 0
Код:
procedure TMainForm.Button1Click(Sender: TObject);
begin
if Length(Edit1.Text) = 0 then
begin
ShowMessage('Надо ввести состояние нового предмета');
exit;
end;
kachestvo1:=StrToInt(Edit1.Text);
if Length(Edit2.Text) = 0 then
begin
ShowMessage('Надо ввести состояние предмета по факту');
exit;
end;
kachestvo2:=StrToInt(Edit2.Text);
if Length(Edit3.Text) = 0 then
begin
ShowMessage('Надо ввести цену нового изделия');
exit;
end;
cenanovogo:=StrToInt(Edit3.Text);
if Length(Edit4.Text) = 0 then
begin
ShowMessage('Надо ввести размер комисcии');
exit;
end;
komissija:=StrToInt(Edit4.Text);
cenapokupki:=kachestvo1 / kachestvo2 * cenanovogo * (1-komissija/100);
Label6.Caption:=FloatToStr(cenapokupki);
cenaprodagi:=kachestvo1 / kachestvo2 * cenanovogo;
Label8.Caption:=FloatToStr(cenaprodagi);
end;
с меня +
=)
|
|
|

08.06.2009, 02:12
|
|
Познающий
Регистрация: 12.05.2009
Сообщений: 45
Провел на форуме: 255342
Репутация:
28
|
|
Код:
if Length(Edit1.Text) = 0 then
begin
ShowMessage(Надо ввести состояние нового предмета');
exit;
nd;
try
if strtoint(Edit1.Text)<=0 then
begin
ShowMessage('Надо ввести число больше 0');
Exit;
end;
except
ShowMessage('Надо ввести целое число!');
Exit;
end;
|
|
|

08.06.2009, 02:17
|
|
Участник форума
Регистрация: 12.06.2007
Сообщений: 160
Провел на форуме: 357904
Репутация:
44
|
|
Нето немножко, необходимо чтоб вводились только цифры
|
|
|

08.06.2009, 02:27
|
|
Постоянный
Регистрация: 20.06.2008
Сообщений: 323
Провел на форуме: 1240829
Репутация:
165
|
|
blednii, тебе всё правильно написали! Если будет введено не число то вылезет ошибка ShowMessage('Надо ввести целое число!');
|
|
|

08.06.2009, 02:33
|
|
Познающий
Регистрация: 12.05.2009
Сообщений: 45
Провел на форуме: 255342
Репутация:
28
|
|
Сообщение от blednii
Нето немножко, необходимо чтоб вводились только цифры
Понял что имеетсо =)
в евенте эдита:
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key<'0') or (Key>'9') then Key:=chr(0);
end;
Чуть не забыл, держи с бекспейсом: if ((Key<'0') or (Key>'9')) and (ord(Key)<>8) then Key:=chr(0); 
Последний раз редактировалось МongBa†; 08.06.2009 в 02:45..
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|