Thread Rating:
  • 352 Vote(s) - 2.76 Average
  • 1
  • 2
  • 3
  • 4
  • 5
クリティカルセクション(Critical section)を Curlで実装する方法
01-18-2016, 05:20 PM,
#4
RE: クリティカルセクション(Critical section)を Curlで実装する方法
「after 0s」はWindowsのPostMessageと同じように、イベントキューの最後に積まれると考えてよさそうです。

シングルスレッドであっても、メッセージループで既に積まれている他のイベントハンドラが全て実行された後に
「after 0s」に記述した処理が実行されることになるので、簡単なStateMachineを組むか、複雑でなければ
単純なフラグ管理でもよいかもしれません。

あまり実用的なコードではないですが、下記のようにグローバル変数を管理するクラスにlockフラグを
つけてもaccessを防げそうです。
Code:
{curl 8.0 applet}

{define-class public GlobalParams
  field public locked?:bool = false
  field _value1:int
  
  {setter public {value1 v:int}
    {if self.locked? then
        {dump "set value1 ignored!", v}
     else
        set self._value1 = v
    }
  }
  
  {getter public {value1}:int
    {return self._value1}
  }
}

{def g_params = {GlobalParams}}


{value
    set g_params.value1 = 1
    
    {CommandButton
        {on Action do
            set g_params.locked? = true
            
            {after 0s do
                {popup-message g_params.value1}
                set g_params.locked? = false
                
                set g_params.value1 = 3
                {popup-message g_params.value1}
            }
            
            set g_params.value1 = 2
        }
    }
}


Messages In This Thread
RE: クリティカルセクション(Critical section)を Curlで実装する方法 - by dyoshida - 01-18-2016, 05:20 PM
Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('1309')