Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.2.184] |
|
Сообщ.
#1
,
|
|
|
Привет всем.
В моей программе одновременно работают несколько потоков, и все они периодически вызывают функцию, которая объявлена в отдельном юните (т.е. она не член класса), функция импортируется из системной библиотеки, вот так: function PrintWindow(HWND:HWND;hdcBlt:HDC;nFlags:DWORD):BOOL; stdcall; external 'user32.dll'; Можно ли так делать? |
Сообщ.
#2
,
|
|
|
Иногда полезно покурить 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 рекомендует вызывать эту функцию из побочных потоков, чтобы прога не повисала, ожидая её выполнения. |
Сообщ.
#3
,
|
|
|
Да, это я читал. Тут вопрос немного другой. Вот есть же всякие фишки, что нельзя например обращаться к одной области памяти из разных потоков. В моём случае указатель на функцию один, получается..
|
Сообщ.
#4
,
|
|
|
Цитата unconnected @ ... нельзя например обращаться к одной области памяти из разных потоков. В моём случае указатель на функцию один, получается.. Не к любой области памяти, а лишь к изменяемой. А функция сама по себе - это просто кусок read-only памяти, который могут одновременно читать\исполнять любое число потоков. Сам подумай - все системные dll представлены в памяти ОС в единственном экземпляре в общей области памяти, разделяемой всеми процессами. Соотв-но разные потоки не только одного, но и разных процессов, могут обращаться к функциям этих dll одновременно. Другое дело, что некоторые функции могут обращаться к неким общим потенциально изменяемым ресурсам процесса или системы в целом. В таких случаях уже внутри самих функций предусматривается синхронизация\блокировка обращения к таким ресурсам из разных потоков. |