SCIP 3.2.0 не заменяет обработчик сообщений

Я хочу, чтобы вызываемый SCIP печатал все сообщения в stderr (используя его в качестве решателя flatzinc). я пробовал

SCIP_DECL_MESSAGEWARNING(printMsg) {
  cerr << msg << flush;
}
...
      SCIP_MESSAGEHDLR* pHndl=0;
      SCIP_CALL ( SCIPmessagehdlrCreate ( &pHndl, FALSE, NULL, FALSE, printMsg, printMsg, printMsg, NULL, NULL) );

без эффекта...

1 ответ

Попробуйте также сообщить SCIP о вашем обработчике сообщений:

  SCIP_CALL( SCIPsetMessagehdlr(scip, pHndl) );

Это заставит SCIP также захватывать ваш обработчик сообщений, поэтому, если он вам больше не нужен, вы можете освободить его:

  SCIP_CALL( SCIPmessagehdlrRelease(&pHndl) );

Это не будет перезаписывать обработчик для сообщений об ошибках, так как они могут быть напечатаны, когда SCIP еще не существует. Вы можете установить обработчик для этого через SCIPmessageSetErrorPrinting(). Но они уже идут в stderr.

Другие вопросы по тегам