Показать сообщение отдельно
Старый 10.04.2015, 15:07   #1  
Владимир Максимов is offline
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,656 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Как передать для Thread временные таблицы?
Ax2009. Как передать в новую нить (Thred) содержимое временной таблицы?

У меня пока единственная идея - это конвертация содержимого таблицы в нечто более примитивное. Например, в контейнер через buf2con() / con2buf(). Но, может есть варианты без конвертации?

PS: GlobalCache - не работает, поскольку в новом Thread получаю чистый (новый) GlobalCache

Пока работаю так:

X++:
// Вызов Thread
void run()
{
    Thread      thread;
    Container   conHeader;
    ;

    while select headerData
    {
        conHeader += [global::buf2con(headerData)];
    }
    thread = new Thread();
    thread.setInputParm([conHeader]);
    thread.removeOnComplete(true);
    thread.run(classnum(MyClass), staticmethodstr(MyClass, runThread));
    thread.waitUntilSignaled();
    infolog.import(thread.getOutputParm());
}

// Обработка
static void runThread(Thread _thread)
{
    container   packedArgs;
    container   conHeader;
    container   conValue;
    int         nextI;

    MyClass  report;
    TmpTable     headerData;
    ;

    report = new MyClass();

    packedArgs = _thread.getInputParm();
    conHeader = conPeek(packedArgs, 1);
    for (nextI = 1; nextI <= conLen(conHeader); nextI++)
    {
        conValue = conPeek(conHeader, nextI);
        global::con2buf(conValue, headerData);
        headerData.insert();
    }
    // Метод через setTmpData() актуализирует временную таблицу в контексте класса
    report.setHeaderData(headerData);

    // Выполнение
    report.run();

    _thread.setOutputParm(infolog.copy(1,infolog.num()));

}
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...