Page 1 of 1

WinCC C-script новый поток

Posted: Fri Sep 28, 2018 4:21 pm
by Usver
Здравствуйте Уважаемые форумчане!
Возникла у меня идея запускать некую функцию в wincc 6.2 в новом потоке (не спрашивайте зачем, просто надо!). Как Вы считаете, это возможно выполнить чере CreateThread из kernel32.dll или эта функция не может работать в wincc? Дело в том, что я ее импортирую, а при ее вызове падает script.exe
Пишу так:

Code: Select all

#include "apdefap.h"
void OnClick(char* lpszPictureName, char* lpszObjectName, char* lpszPropertyName)
{
typedef struct _SECURITY_ATTRIBUTES {
  DWORD  nLength;
  LPVOID lpSecurityDescriptor;
  BOOL   bInheritHandle;
} SECURITY_ATTRIBUTE,  *LPSECURITY_ATTRIBUTE;
#pragma code("kernel32.dll")
void * CreateThread(
  LPSECURITY_ATTRIBUTE   lpThreadAttributes,
  unsigned long               dwStackSize,
  void * lpStartAddress,
  void * lpParameter,
  DWORD                   dwCreationFlags,
  DWORD *                lpThreadId
);
#pragma code()

CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);

}
ThreadFunc - функция в проете, которая имеет вид

Code: Select all

#include "apdefap.h"
void ThreadFunc()
{
//Пока ничего нет, но подразумевается, что будет.
//Но и без ничего не работает!
}
или может как-то по-другому можно?
З.Ы.
Вообще функция д.б. с параметром. Но не работает даже без параметров.

Re: WinCC C-script новый поток

Posted: Mon Oct 08, 2018 11:44 am
by Dfcz
Ого, попахивает спай....? Удачи в нелегком деле.

Re: WinCC C-script новый поток

Posted: Mon Oct 08, 2018 1:54 pm
by Usver
Dfcz wrote:Ого, попахивает спай....? Удачи в нелегком деле.
Что такое спай? Что Вы имели ввиду? Вообще в проекте есть функция, в которой идет вызов функции в самописной ДЛЛ. Вызов такого плана:

Code: Select all

__object * ob;
ob = __object_create("Имя_объекта");
ob -> FunctionOfThisDll(a,b,c,d);
ob = NULL;
Ну и существует мнение, что на этом месте скрипт.ехе бывает маленько подвисает. Так что никакого "спай" или "спайса" там нет. :)

Re: WinCC C-script новый поток

Posted: Mon Oct 15, 2018 9:12 am
by Dfcz
Перефразирую известное выражение: это SIENENS детка!
У Сименс безопасность на втором месте... а может на первом... не могу утверждать.
А может быть даже на всех местах и уровнях... параллельно.

Re: WinCC C-script новый поток

Posted: Fri Oct 19, 2018 5:49 pm
by Usver
Оказалось, что проблема была в другой функции, которая записывает в AlarmLoging сообщение. Процесс записи описан в документации ODK через MSRTStartMsgService и ее сопровождающие. Нарисовал функцию с выполнением в новом потоке в DLL на "крестах", и все поехало. (костыль конечно, а что делать, если рантайм без него часто виснет). В общем проблема разрешилась.

Да, кстати, может кто знает как интерпретируется на обычный "С" __object_create? А то найти не могу.