![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ИМЯ файла... [D5, Win95/98, WinXP]
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;.