2012-03-17 27 views
0

ループでPythonスクリプトが実行されない理由を理解できません。これが繰り返されるべきループが正しく実行されない理由

import gtk, sys 
from ctypes import * 

PIPE_ACCESS_DUPLEX = 0x3 
PIPE_TYPE_MESSAGE = 0x4 
PIPE_READMODE_MESSAGE = 0x2 
PIPE_WAIT = 0 
PIPE_UNLIMITED_INSTANCES = 255 
BUFSIZE = 9600 
NMPWAIT_USE_DEFAULT_WAIT = 0 
INVALID_HANDLE_VALUE = -1 
ERROR_PIPE_CONNECTED = 535 

MESSAGE = "Default answer from server\0" 
szPipename = "\\\\.\\pipe\\mynamedpipe" 

def ReadWrite_ClientPipe_Thread(hPipe): 
    chBuf = create_string_buffer(BUFSIZE) 
    cbRead = c_ulong(0) 
    while True: 
     fSuccess = windll.kernel32.ReadFile(hPipe, chBuf, BUFSIZE, byref(cbRead), None) 
     if ((fSuccess ==1) or (cbRead.value != 0)): 
      messageArd = chBuf.value 
      cbWritten = c_ulong(0) 
      fSuccess = windll.kernel32.WriteFile(hPipe,c_char_p(MESSAGE), len(MESSAGE), byref(cbWritten), None) 
    windll.kernel32.FlushFileBuffers(hPipe) 
    windll.kernel32.DisconnectNamedPipe(hPipe) 
    windll.kernel32.CloseHandle(hPipe) 
    return 0 

def main(): 
    THREADFUNC = CFUNCTYPE(c_int, c_int) 
    thread_func = THREADFUNC(ReadWrite_ClientPipe_Thread) 
    while True: 
     print "Print test" #This should be repeated 
     hPipe = windll.kernel32.CreateNamedPipeA(szPipename,PIPE_ACCESS_DUPLEX,PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE | PIPE_WAIT,PIPE_UNLIMITED_INSTANCES,BUFSIZE, BUFSIZE,NMPWAIT_USE_DEFAULT_WAIT,None) 
     fConnected = windll.kernel32.ConnectNamedPipe(hPipe, None) 
     if ((fConnected == 0) and (windll.kernel32.GetLastError() == ERROR_PIPE_CONNECTED)): 
      fConnected = 1 

     if (fConnected == 1): 
      dwThreadId = c_ulong(0) 
      hThread = windll.kernel32.CreateThread(None, 0,thread_func, hPipe, 0, byref(dwThreadId)) 

    gtk.main() 

if __name__ == "__main__": 
    main() 

:私はDEFメインを変更したり、名前付きパイプのスクリプトを削除した場合

print "Print test" 

、ループが正常に実行されます。

def main(): 
    while True: 
     print "Print test" #This should be repeated 
    gtk.main() 

誰かがこの問題を解決するのに役立つことがありますか?ありがとうございます

+0

どのような出力/エラーメッセージが表示されますか? – mfrankli

+0

その上にデバッガを置いてどこに行くのか見てみましょう。 – Doboy

+0

エラーはありません。ループは1回だけ実行され、1回だけ "Print Test"が印刷されます。それは永遠に繰り返されるはずです。 – Varanka

答えて

0

解決済みの問題です。

同時に実行するループが2つあり、マルチスレッドのソリューションがあるため、ループが機能しません。同じループで2つのループを実行するには

関連する問題