На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Многопоточность и external-метод
    Привет всем.
    В моей программе одновременно работают несколько потоков, и все они периодически вызывают функцию, которая объявлена в отдельном юните (т.е. она не член класса), функция импортируется из системной библиотеки, вот так:
    ExpandedWrap disabled
      function PrintWindow(HWND:HWND;hdcBlt:HDC;nFlags:DWORD):BOOL; stdcall; external 'user32.dll';

    Можно ли так делать?
      Иногда полезно покурить MSDN, вот, я тут нашёл, посмотри. Обрати внимание на вот это:
      Цитата
      Note This is a blocking or synchronous function and might not return immediately. How quickly this function returns depends on run-time factors such as network status, print server configuration, and printer driver implementation—factors that are difficult to predict when writing an application. Calling this function from a thread that manages interaction with the user interface could make the application appear to be unresponsive.

      Так что, если я правильно понял, microsoft рекомендует вызывать эту функцию из побочных потоков, чтобы прога не повисала, ожидая её выполнения.
        Да, это я читал. Тут вопрос немного другой. Вот есть же всякие фишки, что нельзя например обращаться к одной области памяти из разных потоков. В моём случае указатель на функцию один, получается..
          Цитата unconnected @
          ... нельзя например обращаться к одной области памяти из разных потоков. В моём случае указатель на функцию один, получается..

          Не к любой области памяти, а лишь к изменяемой. А функция сама по себе - это просто кусок read-only памяти, который могут одновременно читать\исполнять любое число потоков. Сам подумай - все системные dll представлены в памяти ОС в единственном экземпляре в общей области памяти, разделяемой всеми процессами. Соотв-но разные потоки не только одного, но и разных процессов, могут обращаться к функциям этих dll одновременно.

          Другое дело, что некоторые функции могут обращаться к неким общим потенциально изменяемым ресурсам процесса или системы в целом. В таких случаях уже внутри самих функций предусматривается синхронизация\блокировка обращения к таким ресурсам из разных потоков.
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0644 ]   [ 16 queries used ]   [ Generated: 3.05.24, 05:19 GMT ]