Project

General

Profile

Actions

Support Request #952

closed

Trying to increase stack size for a selected filters

Added by hidden almost 7 years ago. Updated over 6 years ago.

Status:
Closed
Priority:
Normal
Customer:
BOSCH
Department:
CC-DA/ESI
Requester's Priority:
Normal
Support Level:
3rd Level
Resolution:
Solved Issue
Platform:
Windows 7 64bit
Topic:
ADTF::Common
FAQ Links:

Description

Supportanfrage

Wenn ich mich richtig erinnere, wurde beim Übergang von 2.9.0 auf 2.9.1 die Stack-Größe auf einen kleineren Wert eingestellt. Das hat bei einigen unserer Filter (z. B. dem Framegrabber-Filter) zu Problemen geführt, weil dort ganze Bilder auf dem Stack abgelegt wurden (ob das sinnvoll ist oder nicht sei dahingestellt). Mit der kleineren Stackgröße reichte der Speicher nicht mehr aus. Das gleiche Problem ist nun an anderen Stellen bei Filtern aus unserer SIL-Umgebung aufgetaucht, die gerade von ADTF 2.9.0 auf 2.13 portiert wird.
Ich war der Meinung man kann in Visual Studio die Stack-Größe für jeden Filter individuell einstellen. Die Kollegen haben mir nun zurückgemeldet, dass man das zwar kann, es aber keine Auswirkung hat (die Stack-Größe wird vom ADTF-Framework übernommen?).
Eine Lösung für das Problem ist die Filter - wie unseren Framegrabber-Filter - umzuschreiben und die Daten statt auf dem Stack auf dem Heap abzulegen.
Es kam nun die Frage auf, ob es auch eine Lösung ohne Code-Änderung gibt. Die ursprüngliche Anfrage nach einem ADTF 2.13 wieder mit größerer Stack-Size habe ich bereits verneint.
Habt Ihr noch eine andere Idee oder einen Weg einzelnen Filtern einen größeren Stack zu spendieren?

Lösung

Das Compiler Flag /STACK:[0-9] ist der Wert, der per Default verwendet werden soll, wenn man einen Thread erzeugt.
D.h. man weist nicht einem Filter Speicher zu, sondern den CreateThread aufrufen unter Windows. Daher kann das auch nicht hochgesetzt werden für alle.

Wenn man synchron in einem OnPinEvent arbeitet, dann arbeitet in Caller Kontext, der den Stack für diesen Thread erzeugt hat.
D.h. die Stackgröße für einen Thread kann man nur verändern durch folgende Möglichkeiten:

1. Das OnPinEvent darf nicht synchron, sondern muss asynchron in einem eigenen thread verarbeitet werden:
2. a) Dabei muss man einen ::CreateThread Aufruf selber implementieren (siehe https://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx) dort kann man die Stackgröße angeben
2. b) Ein a_utils::cThread verwenden und die Compileroption /Stack:<mysize> verwenden.


Files

cmake_variable_stack.png (14.9 KB) cmake_variable_stack.png hidden, 2017-08-09 09:28
Actions

Also available in: Atom PDF