초보적인 질문 입니다..
정말 쑥스럽군요 ㅠㅠ
TSendUDPThread 라는 클래스의 스레드를 수행하는 프로그램인데요..
resume 하게되면
sendSearchNode(m_node, m_action); procedure를 호출하게 됩니다..
sendSearchNode 프로시저에서 Tree를 검색하면서 데이터 처리를 하게되는데요.
sychronized 가 안맞는지 자주 오류가 뜹니다.. 특히 DB처리시..
그래서 Thread에서 sendSearchNode를 synchronized를 해주고 싶은데..
어떠한 식으로 해줘야 하는지 알려주시면 감사하겠습니다..
Execute procedure안에서
synchronized( sendSearchNode(m_node, m_action) ); 이곤 안되더군요 ㅠㅠ..
{ TSendUDPThread }
constructor TSendSearchThread.Create(Node : PVirtualNode; Action : Integer);
begin
inherited Create(True);
self.m_action := Action;
Self.m_node := Node;
FreeOnTerminate := True;
end;
procedure TSendSearchThread.Execute;
begin
F_Debug.Display.Lines.Add('node check : sendSearch Thread Run...');
sendSearchNode(m_node, m_action);
F_SessionManager.sessionListRefresh.Enabled := true; // sessionList Refresh ON
end;
// Node의 체크여부를 확인하여 sendUDPMessage()를 호출한다.
procedure TSendSearchThread.sendSearchNode(Node : PVirtualNode; m_Action : Integer);
var
Data : PCustRec;
i, Count : Integer;
begin
with F_SessionManager do
if (Node.CheckState = csCheckedNormal) or (Node.CheckState = csMixedNormal) then
begin
setNodeDefaultData(Node); // node_response=0, node_check=1, node_expand
incNodeCount(Node); // node increment count
Data := VST_Session.GetNodeData(Node);
sendUDPMessage(Data.nodeType-1, m_Action, Node);
Count := Node.ChildCount;
if (count > 0) then
begin
Node := Node.FirstChild;
for i:=0 to Count-1 do
begin
if (Node.ChildCount > 0) then // relay
self.sendSearchNode(Node, m_Action)
else begin
if (Node.CheckState = csCheckedNormal) or (Node.CheckState = csMixedNormal) then
begin
setNodeDefaultData(Node); // node_response=0, node_check=1, node_expand
incNodeCount(Node); // node increment count
Data := VST_Session.GetNodeData(Node);
sendUDPMessage(Data.nodeType-1, m_Action, Node);
end;
end;
if (i < Count-1) then
Node := Node.NextSibling;
end; // for
end; // if
end;
end;