Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ИМЯ файла... [D5, Win95/98, WinXP]


Страницы:   1 2

GanibalLector ©   (2005-01-03 17:33:00) 

Есть поток,в котором через OLE вызываю Word и создаю документы.После создания,сохраняю его по некоторому пути.
Из основного потока,дожидаюсь завершения второго(того,что с Word-ом работает) и запускаю как отдельный процесс,после этого пользователь наслождается.
Так вот,проблема в имени файла,который сохраняется,а потом запускается.Да,я знаю,что можно в реестре(ини) хранить некоторое значение,наращивать его и т.д.
Но так не хочется!!!Это ж надо заводить переменные,связываться с реестром.ФИ!!!
Вы не подумайте,это могу это сделать элементарно в считанные минуты,но,ХОТЬ УБЕЙТЕ,не хочу я лишних переменных и прочей чепухи.
Может как-то замутить со временем или еще как-то???
З.Ы.Да,забыл,сегодня употреблял...


GuAV   (2005-01-06 18:24:00) [1]

Fay ©   (06.01.05 7:54) [31]
А почему в исхолниках не встречается IsMultiThread := False ? Это юмор такой?


А когда Вы предлагаете его установить обратно в False ? В каком месте кода ?


Fay   (2005-01-06 07:54:00) [2]

2 GuAV ©   (04.01.05 12:24) [25]
Да, что-то я не догадался поискать по inc-ам.
А почему в исхолниках не встречается IsMultiThread := False ? Это юмор такой?


GanibalLector   (2005-01-06 01:18:00) [3]

2 GuAV ©    [29]
>IMHO, запросто.
Прикинь,это и было.Удалил ProLing(так вроде назывался) и наступило долгожданное счастье


GuAV   (2005-01-05 02:30:00) [4]


> З.Ы.Ах да,забыл сказать,на этой машине,которая с этим
> сообщением стоит РУТА-ПЛАЙ(ну,переводчик
> рус.-укр.).Может из-за этого?

IMHO, запросто.
GanibalLector ©   (05.01.05 2:22) [28]
Извини за LOL,но что-то не пойму как? КаШпировский молчит.


Сервиз->Макрос->Редактор VB.
см. Normal, Project на наличие

Private Sub Document_Close()
Private Sub Document_New()
Private Sub Document_Open()


Также ищи там свою Руту.


GanibalLector   (2005-01-05 02:22:00) [5]

>Проверь и файл и нормал.дот на наличие макросов.
Извини за LOL,но что-то не пойму как? КаШпировский молчит.
> кроме тех, что сам добавил
Не,я такого не делал.

З.Ы.Ах да,забыл сказать,на этой машине,которая с этим сообщением стоит РУТА-ПЛАЙ(ну,переводчик рус.-укр.).Может из-за этого?


GuAV   (2005-01-05 02:13:00) [6]

Проверь и файл и нормал.дот на наличие макросов. их там біть не должно, кроме тех, что сам добавил.


GanibalLector   (2005-01-05 02:10:00) [7]

Епрст...не слов,одни маты.
Вот,сделал...из потока сохраняю в файл,поток умирает,жду смерти потока из основного потока программы и запускаю этот файл.
И опять,это гребанное сообщение про Normal.dot.Я ж его не трогаю...

З.Ы.Скажите,а может ли такое случиться,если некоторые хендлы(или еще чего) не закрыты???


GuAV   (2005-01-04 12:24:00) [8]

Fay ©   (04.01.05 7:12) [24]

Если все потоки создаешь через BeginThread или наследника TThread, то проблем и не будет.

Эта переменная указывает менеджеру памяти что приложение многопоточно. Обращения к куче в этом случае защищены крит секцией - см. ($Delphi7)\Source\Rtl\Sys\getmem.inc


Fay   (2005-01-04 07:12:00) [9]

2 GuAV ©   (03.01.05 21:50) [23]
А что даёт IsMultiThread? В исходниках он упоминается только как IsMultiThread := True. Я никогда его не использовал и проблем не было - что я делаю не так, как получить траблы?


GuAV   (2005-01-03 21:50:00) [10]

Следует использовать RTL функции управления потоками, т.к. имеются различия между одно- и многопоточным управлением памятью. BeginThread также устанавливает Corpocesssor Control Word.

Можно конечно установить IsMultiThread вручную. Однако это implementation-specific трюк. В справке по IsMultiThread написано что она устанавливается BeginThread, но нет ничего про установку вручную.

Кстати, видимо это касается не только Delphi. Из MSDN:
"A thread that uses functions from the C run-time libraries should use the beginthread and endthread C run-time functions for thread management rather than CreateThread and ExitThread. "

PS: если перейдёшь на BeginThread не забудь убрать stdcall


GanibalLector   (2005-01-03 21:22:00) [11]

>я рекомендую использовать BeginThread/EndThread заместо CreateThread/ExitThread

А почему?Мотивируй,если не сложно...
З.Ы.В исходниках Мистика я видел такие фокусы ;)


GuAV   (2005-01-03 21:19:00) [12]

GanibalLector ©   (03.01.05 21:10) [20]

На самом деле туда можно засунуть любое значение.
Только если используется проверка на STILL_ACTIVE, то использовать это значение с осторожностью. Однако, STILL_ACTIVE = $00000103 никогда не будет валидным указателем, поэтому тут IMHO всё чисто.

я рекомендую использовать BeginThread/EndThread заместо CreateThread/ExitThread.


GanibalLector   (2005-01-03 21:10:00) [13]

2 GuaV
В общем все получилось,спасибо.Еще вопросик...
Я всегда думал,что
Result:=0;
exitthread(Result);

завершает поток.Т.е.нуль ОБЯЗАТЕЛЬНО.
А получается,что туда хоть черта можно засунуть и поток все равно завершится.Что скажешь???
З.Ы.Я просто по англ.читать не могу...посему и спрашиваю.


GuAV   (2005-01-03 20:56:00) [14]

GanibalLector ©   (03.01.05 19:44) [17]
Это понятно,а как посмотреть-то на Result ???Скажем вывести на Caption.Что-то не могу понять...


GetExitCodeThread

и освободить не забыть.

Кстати преимущестов в том, что с каждым Thread связана своя структура в отл от глобальной переменной.

Fay ©   (03.01.05 19:27) [14]
Нет. Первый кусок кода после или в [13]


Fay   (2005-01-03 20:33:00) [15]

2 GanibalLector ©   (03.01.05 19:44) [17]
> Не,один

Ну так здорово! Так ведь?


GanibalLector   (2005-01-03 19:44:00) [16]

2 GuAV   [13]
>Раз как сейчас, тогда можно вернуть строку в коде возврата потока.
Result:=DWORD(StrNew(FileName));

Это понятно,а как посмотреть-то на Result ???Скажем вывести на Caption.Что-то не могу понять...

Fay [16]
>Если создающих файлы потоков несколько
Не,один


Fay   (2005-01-03 19:34:00) [17]

Если создающих файлы потоков несколько, то можно завести переменную (не обязательно глобальную) для счетчика (Вася_Пупкин_ N), которую видно из разных потоков, а обращение к ней защитить критической секцией. Я бы так сделал.


Fay   (2005-01-03 19:28:00) [18]

"Я что" = "А что" 8)


Fay   (2005-01-03 19:27:00) [19]

2 GuAV ©   (03.01.05 19:01) [13]

>type
> PResultRec = ^TResultRec;
> PResultRec = record
>   FileName: string
>  end;


Я что, PChar (к примеру) уже отменили?


GuAV   (2005-01-03 19:01:00) [20]

2 GanibalLector © [11]

с TThread можно было бы добавить поле в свой класс.

Раз как сейчас, тогда можно вернуть строку в коде возврата потока.

Result:=DWORD(StrNew(FileName));

или

New(PResultRec(Result)); где

type
 PResultRec = ^TResultRec;
 PResultRec = record
   FileName: string
 end;

Кстати, напоминаю про IsMutliThread - ниаче работать не будет.

Result:=0; exitthread(Result); излише. достаточно exitthread(0) или Result:=0;.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо