Почему цикл не работает должным образом - PullRequest
0 голосов
/ 17 марта 2012

Я не понимаю, почему цикл не запускает мой скрипт 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()

Это должно быть повторено:

 print "Print test"

Если я изменю def Main или удалим скрипт Named Pipe, цикл будет работать правильно.кто-нибудь поможет мне решить эту проблему?Спасибо

1 Ответ

0 голосов
/ 21 марта 2012

Решенная проблема.

Цикл не работает, потому что одновременно работают два цикла, решение с многопоточностью.Чтобы запустить две петли одновременно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...