Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Вниз

Проблема с HT   Найти похожие ветки 

 
_Sergey_ ©   (2006-09-18 13:34) [0]

Здравствуйте.
Я написал консольное клиент-серверное приложение на D7. Использовал такие юниты: SysUtils, WinSock, Windows, Classes.
При этом при включенном HT, запущенных 39 клиентах и 1-м сервере с периодичностью в 15 мин. клиенты "вываливаются" с MessageBox-ами с сообщениями об ошибках работы с памятью, причем с разными адресами. Примеры:
;-------
Инструкция по адресу "0x00140190" обратилась к памяти по адресу "0x98449844". Память не может быть "written".
"OK" -- завершение приложения
;-------
Инструкция по адресу "0x77f745cc" обратилась к памяти по адресу "0xffffffff". Память не может быть "read". "OK" -- завершение приложения
;-------
Инструкция по адресу "0x00140199" обратилась к памяти по адресу "0x00002930". Память не может быть "written".
"OK" -- завершение приложения
;-------
Инструкция по адресу "0x77f745cc" обратилась к памяти по адресу "0x00000007". Память не может быть "written".
"OK" -- завершение приложения
;-------
Инструкция по адресу "0x00000000" обратилась к памяти по адресу "0x00000000". Память не может быть "read". "OK" -- завершение приложения
;-------
Причем частота появления ошибок увеличивается при активном параллельном использовании "тяжелых" сторонних программ во время проведения теста (Photoshop, FineReader, ...), особенно при их запуске/завершении.
Использование SetThreadAffinityMask не помогло. Привязал всех клиентов на машинке с P4 3.0 GHz HT к 0-му процессору командой SetThreadAffinityMask(GetCurrentThread, 1). ОС - WinXP Pro SP2. Результат тот же.
Перезагружаю машинку, выключаю в BIOS-е HT, провожу тот же тест - никаких сообщений об ошибках. Все чисто. Что посоветуете, какие мысли по поводу вышеизложенного?

P.S>
- при включенном HT тестирование приводит к вышеуказанным ошибкам;
- при выключенном HT программа может работать в условиях тестирования сутки, и ни одной ошибки не возникает.
В своей программе я не использую ф-ий работы с многопроцессорными системами. Более того, можно подумать, что я неправильно синхронизирую потоки, и такая синхронизация "проходит" на однопроцессорной системе, но не "проходит" на многопроцессорной. Но у меня и поток один. Нечего там синхронизировать.


 
Игорь Шевченко ©   (2006-09-18 13:57) [1]


> Что посоветуете, какие мысли по поводу вышеизложенного?


Программу отлаживать. Очевидно, неверная синхронизация потоков


 
Rouse_ ©   (2006-09-18 14:20) [2]

В NT (про другие не знаю) для работы с сокетом запускается дополнительный поток.
Запускается автоматом при инициализации Windows Sockets service provider,
с которым будет потом работать клиент.
И как не странно этот поток принадлежит твоему процессу :)


 
_Sergey_ ©   (2006-09-19 21:41) [3]

Спасибо. Действительно, моя программа использует только 1 поток, в то время, как в диспетчере задач их отображается 2 шт. Но, как я понял, к этому потоку я доступа не имею. Как тогда осуществлять синхронизацию?

Интересная информация:
при включенном HT под Win2k Pro SP4 Rus и Windows 2003 Server Standard Edition Rus в тех же условиях тестирования (кроме ОС, конечно), на том же железе никаких ошибок не возникало. Похоже, это проблемки с WinXP Pro SP2. Но как там синхронизировать потоки, если второй поток - не мой?


 
guav ©   (2006-09-19 22:25) [4]

> Но у меня и поток один. Нечего там синхронизировать.

В некоторые функций WSA передаётся адрес callback-функции в качестве параметра (это WSAAccept и overlapped-версии WSASend, WSASendTo, WSARecv, WSARecvFrom) , если какая-то часть пользовательского кода могла "попасть в другой поток", то это callback-функции; в них и стоит проверить GetCurrentThreadId, совпадает ли она с первичной нитью.
Если callback-функции имеются действительно вызываются в другом потоке, то важной частью межпоточной синхронизации будет установка переменной IsMultiThread в True.

Вообще, какой режим сокетов используется, используется ли overlapped ?


 
_Sergey_ ©   (2006-09-20 12:26) [5]

Используется 1 поток, блокирующие сокеты, все ф-ии - WinSock 1.1, callback-функции не используются, overlapped не используется. Более подробно о моем приложении и принципах его реализации Вы можете прочитать здесь:
http://delphimaster.net/view/6-1157482660/



Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.036 c
15-1168353842
Footballer
2007-01-09 17:44
2007.01.28
Видео


15-1168081075
kaZaNoVa
2007-01-06 13:57
2007.01.28
Покритикуйте программу, Self-loader


2-1168609607
DelphiLexx
2007-01-12 16:46
2007.01.28
Как в SynEdit выделить некоторые строки другим цветом


15-1167850639
Kolan
2007-01-03 21:57
2007.01.28
Не пойму почему код работает :)


15-1167887080
MsGuns
2007-01-04 08:04
2007.01.28
Приснится же такое ;)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский