plcforum.uz.ua

International PLC Forum
It is currently Sun Nov 18, 2018 5:35 pm

All times are UTC + 3 hours


Forum rules


Please click here to view the forum rules



Post new topic Reply to topic  [ 5 posts ] 
Author Message
PostPosted: Fri Sep 28, 2018 7:21 pm 

Joined: Fri Feb 24, 2012 11:28 am
Posts: 127
Здравствуйте Уважаемые форумчане!
Возникла у меня идея запускать некую функцию в wincc 6.2 в новом потоке (не спрашивайте зачем, просто надо!). Как Вы считаете, это возможно выполнить чере CreateThread из kernel32.dll или эта функция не может работать в wincc? Дело в том, что я ее импортирую, а при ее вызове падает script.exe
Пишу так:
Code:
#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:
#include "apdefap.h"
void ThreadFunc()
{
//Пока ничего нет, но подразумевается, что будет.
//Но и без ничего не работает!
}

или может как-то по-другому можно?
З.Ы.
Вообще функция д.б. с параметром. Но не работает даже без параметров.


Top
 Profile  
 
PostPosted: Mon Oct 08, 2018 2:44 pm 

Joined: Tue Dec 26, 2006 8:21 am
Posts: 590
Location: Russia
Ого, попахивает спай....? Удачи в нелегком деле.


Top
 Profile  
 
PostPosted: Mon Oct 08, 2018 4:54 pm 

Joined: Fri Feb 24, 2012 11:28 am
Posts: 127
Dfcz wrote:
Ого, попахивает спай....? Удачи в нелегком деле.
Что такое спай? Что Вы имели ввиду? Вообще в проекте есть функция, в которой идет вызов функции в самописной ДЛЛ. Вызов такого плана:
Code:
__object * ob;
ob = __object_create("Имя_объекта");
ob -> FunctionOfThisDll(a,b,c,d);
ob = NULL;
Ну и существует мнение, что на этом месте скрипт.ехе бывает маленько подвисает. Так что никакого "спай" или "спайса" там нет. :)


Top
 Profile  
 
PostPosted: Mon Oct 15, 2018 12:12 pm 

Joined: Tue Dec 26, 2006 8:21 am
Posts: 590
Location: Russia
Перефразирую известное выражение: это SIENENS детка!
У Сименс безопасность на втором месте... а может на первом... не могу утверждать.
А может быть даже на всех местах и уровнях... параллельно.


Top
 Profile  
 
PostPosted: Fri Oct 19, 2018 8:49 pm 

Joined: Fri Feb 24, 2012 11:28 am
Posts: 127
Оказалось, что проблема была в другой функции, которая записывает в AlarmLoging сообщение. Процесс записи описан в документации ODK через MSRTStartMsgService и ее сопровождающие. Нарисовал функцию с выполнением в новом потоке в DLL на "крестах", и все поехало. (костыль конечно, а что делать, если рантайм без него часто виснет). В общем проблема разрешилась.

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


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 5 posts ] 

All times are UTC + 3 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by International PLCforum® Forum Software © PLCforum
Mobile version