В настоящее время я изо всех сил пытаюсь справиться с потоками. У меня есть ощущение, что это может быть связано с моими прицелами; однако я не вижу, где я ошибаюсь.
Мой CFC содержит следующую функцию:
<cfcomponent output="false" hint="thread stuff.">
<cffunction name="threadTest" access="public" returntype="struct">
<cfscript>
local.lstOne = "1,2,3,4,5,6";
local.a = [];
local.s = {};
local.lst = "";
for(local.x = 1; local.x lte listlen(local.lstOne,','); local.x++){
local.lst &= (len(local.lst) gt 0) ? ',thr#local.x#' : 'thr#local.x#';
thread action="run" name="thr#local.x#" nIndex="#local.x#" aArray="#local.a#"{
thread.y = attributes.nIndex;
thread.aArray = attributes.aArray;
if(thread.y mod 2){
thread.c = 1;
} else {
thread.c = 0;
}
thread.stArgs = {};
thread.stArgs.nMod = thread.c;
arrayAppend(thread.aArray, thread.stArgs);
}
}
threadJoin(local.lst);
local.s.counts = local.a;
return local.s;
</cfscript>
</cffunction>
</cfcomponent>
и у меня есть страница CFM, которая выглядит примерно так:
<cfscript>
theThread = createObject( "component", "ThreadStuff" ).init();
theThread.threadTest();
</cfscript>
Когда я запускаю это, coldfusion возвращается с ошибкой Элемент X не определен в LOCAL.
Я не могу понять, почему он теряет local.x после первой итерации цикла (я доказал это, выполнив дамп в начале цикла и в конце цикла, и он не может добраться до local.x = 2).
где я могу ошибаться?
counts
с пустым массивомa
. - person imthepitts   schedule 20.02.2013init()
. Если это сокращенная версия, внесите точный код, и, надеюсь, я смогу воспроизвести вашу ошибку. - person imthepitts   schedule 20.02.2013local.x
не определена, но этот код не будет делать то, на что вы надеетесь. Структураlocal.s
содержит только один элемент — пустой массивlocal.a
. В настоящее времяlocal.a
передается как пустое для каждого потока, а затем оно не изменяется внутри потока. Таким образом, он выходит пустым до сих пор. Чтобы структура возвращала счетчики из потоков, вам нужно передать эту структуру в поток и добавить к ней массивы в блоке потока. - person imthepitts   schedule 20.02.2013