jf...@ms4.hinet.net wrote: > I am new to Python. As an exercise of it, I try to port a program which > was written more than 10 years ago. This program use the Borland C++ > Builder as its GUI front end and a DLL does the real work(it will takes a > few seconds to complete). I saw a strange phenomenon in the following > codes. The "var_status.set('Download...')" statement seems was deferred > and didn't show up until the external DLL job was finished and I can only > saw the result of "var_status.set('Download OK')" statement which > immediately follows. I try to do the DLL function in a thread(selected by > using the "test" flag in codes), but it didn't help. > > Can anyone tell me what's the point I was missed?
What does var_status.set() do? If it writes to stdout you may just need to flush(). Do you see the same behaviour when you replace mydll.SayHello() with something simple like time.sleep(1)? > ------------------------- > def download(): > global iniFilename > if test: global result, busy > ini = iniFilename > iniFilename = "c:\\$$temp.in3" > saveIniFile() > iniFilename = ini > #do the rest > var_status.set('Download...') > if not test: > result = mydll.SayHello() > else: > busy = True > _thread.start_new_thread(td_download, ()) > while busy: pass > if result: > var_status.set("Download Fail at %s" % hex(result)) > showerror('Romter', 'Download Fail') > else: > var_status.set('Download OK') > showinfo('Romter', 'Download OK') > > if test: > result = 0x5555 > busy = True > def td_download(): > global busy, result > result = mydll.SayHello() > busy = False > -------------------------- As a general remark keep your test scripts as simple as possible. Example: If import mydll print("Download...", end="") mydll.SayHello() print("OK") showed the same behaviour it would be the ideal test script. -- https://mail.python.org/mailman/listinfo/python-list