擅长:python、mysql、java
<p>你可以用很多线程来测试它:</p>
<pre><code>import sys, random, thread
def timeup():
sys.stdout.write("Timer:: Up %f" % time())
def trdfunc(kt, tid):
while True :
sleep(1)
if not kt.isRunning():
if kt.start(1, timeup):
sys.stdout.write("[%d]: started\n" % tid)
else:
if random.random() < 0.1:
kt.stop()
sys.stdout.write("[%d]: stopped\n" % tid)
sys.stdout.write("[%d] remains %f\n" % ( tid, kt.timeRemaining))
kt = KitchenTimer()
kt.start(1, timeup)
for i in range(1, 100):
thread.start_new_thread ( trdfunc, (kt, i) )
trdfunc(kt, 0)
</code></pre>
<p>我看到了几个问题:</p>
<ul>
<li><p>当一个线程看到计时器没有运行并试图启动它时
代码通常会引发一个异常,原因是在
测试并启动。我觉得破例太多了。或者你可以
具有原子测试和启动功能</p></li>
<li><p>stop也会出现类似的问题。您可以实现testAndStop
功能。</p></li>
<li><p>甚至这个来自<code>timeRemaining</code>函数的代码:</p>
<pre><code>if self.isRunning():
self._timeRemaining = self.duration - self._elapsedTime()
</code></pre>
<p>需要某种原子性,也许你需要在
测试正在运行。</p></li>
</ul>
<p>如果计划在线程之间共享该类,则需要解决这些问题。</p>