0x9111A написав:Я би запхнув всі параметри в структуру з гарною назвою типу "thread_context" і передавав її
Це мало чим відрізняється від просто кучки параметрів)
Робити структуру, яка виконається рівно один раз... хм... може то в поля класу тоді запхати. (бо це насправді були методи, а не функції, але це не багато змінює)
Torbins написав:ADR
Якщо параметри однакові, і алгоритми також, то можна посилання на функцію "б" або "в" передавати. Типу такого:
TThread.Execute(@FunctionB, ParamB);
Можна й масивом по кілька посилань.
Проблема в тому, що вони з'єднані цепочкою, при чому не всі ланки цієї цепочки обов'язкові.
koala написав:Два варіанти, які, зрештою, зводяться до одного: або, як сказав 0x9111A, створити об'єкт з параметрів і передавати параметром один об'єкт; або ж створити об'єкт, який буде інкапсулювати всю діяльність цього потоку, виставляти його параметри і викликати його метод run, який вже створюватиме потік.
Параметри передаються з форми — все одно вийде, що буде фукнція, яка то все приймає...
Зараз воно виглядає так:
class RawDataParser(AbstractWorker):
...
def start(
self,
input_file: str,
output_path_pattern: str,
check_data_exists: bool,
sel_chip_list: List[str],
sel_temp_list: List[str],
make_vertical_and_horizontal_tables: bool = True,
custom_parameters_count: int = 0,
check_data_correct: bool = False,
columns: List[int] = (),
coverage_factor: float = 10
):
self.__thread = threading.Thread(target=self.__parse,
args=(input_file, output_path_pattern, check_data_exists,
sel_chip_list, sel_temp_list, make_vertical_and_horizontal_tables,
custom_parameters_count, check_data_correct, columns, coverage_factor))
self.__thread.start()
def __parse(self, input_file: str, output_path_pattern: str, check_data_exists: bool,
sel_chip_list: List[str], sel_temp_list: List[str], make_vertical_and_horizontal_tables: bool,
custom_parameters_count: int, check_data_correct: bool, columns: List[int], coverage_factor: float):
...
Робив нову версію і думав за одно зробити гарніше.