Stack.h: 13: 3: ошибка: «Ячейка» не называет тип

Я мало знаю о деталях низкого уровня; но, учитывая, что в python 2.6 API предлагает возможность ждать потоков и завершать процессы, как запустить процесс в отдельном потоке?

import subprocess, threading

class Command(object):
    def __init__(self, cmd):
        self.cmd = cmd
        self.process = None

    def run(self, timeout):
        def target():
            print 'Thread started'
            self.process = subprocess.Popen(self.cmd, shell=True)
            self.process.communicate()
            print 'Thread finished'

        thread = threading.Thread(target=target)
        thread.start()

        thread.join(timeout)
        if thread.is_alive():
            print 'Terminating process'
            self.process.terminate()
            thread.join()
        print self.process.returncode

command = Command("echo 'Process started'; sleep 2; echo 'Process finished'")
command.run(timeout=3)
command.run(timeout=1)

Вывод этого фрагмента на моей машине:

Thread started
Process started
Process finished
Thread finished
0
Thread started
Process started
Terminating process
Thread finished
-15

, где можно видеть, что при первом выполнении процесс завершился правильно (код возврата 0), а во втором - завершение процесса (код возврата -15).

Я не тестировал в окнах; но, помимо обновления команды примера, я думаю, что она должна работать, поскольку я не нашел в документации ничего, что говорит о том, что thread.join или process.terminate не поддерживается.

0
задан MuxMux 15 January 2019 в 22:00
поделиться

1 ответ

Линия Cell *m_firstCellPtr; относится к типу Cell, который явно не известен в этой точке.

Это очень вероятно, потому что книга просто показывает Stack -части на этой странице, не упоминая, что вам придется объявить Cell, например, включив что-то вроде #include "Cell.h"

Три способа выйти из этого:

  1. #include "Cell.h", если ресурсы книги предоставят его
  2. Форвард объявить [ 116] как class Cell; до определения Stack;
  3. изменить строку на class Cell *m_firstCellPtr;
0
ответ дан Stephan Lechner 15 January 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: