put_msgfunc

Sets a message routine.

void put_msgfunc(lprec *lp, lphandleint_func newmsg, void *msghandle, int mask);

Return Value

put_msgfunc has no return value.

Parameters

lp

Pointer to previously created lp model. See return value of make_lp, copy_lp, read_lp, read_LP, read_mps, read_freemps, read_MPS, read_freeMPS, read_XLI

newmsg

The message routine.

typedef void (__WINAPI lphandleint_func)(lprec *lp, void *userhandle, int message);

Note the __WINAPI attribute. This is important under Windows. It ensures __stdcall calling convention which is required.

msghandle

A parameter that will be provided to the message routine.

mask

Any combination of the following values:

MSG_PRESOLVE (1) Presolve done.
MSG_ITERATION (2)
MSG_INVERT (4)
MSG_LPFEASIBLE (8) Feasible solution found.
MSG_LPOPTIMAL (16) Real optimal solution found. Only fired when there are integer variables at the start of B&B
MSG_LPEQUAL (32)
MSG_LPBETTER (64)
MSG_MILPFEASIBLE (128) First MILPsolution found. Only fired when there are integer variables during B&B
MSG_MILPEQUAL (256) Equal MILP solution found. Only fired when there are integer variables during B&B
MSG_MILPBETTER (512) Better MILPsolution found. Only fired when there are integer variables during B&B
MSG_MILPSTRATEGY (1024)
MSG_MILPOPTIMAL (2048)
MSG_PERFORMANCE (4096)
MSG_INITPSEUDOCOST (8192)

Remarks

The put_msgfunc function sets a message routine. This routine is called when a situation specified in mask occurs. Note that this routine is called while solving the model. This can be useful to follow the solving progress.

Example

#include <stdio.h>
#include <stdlib.h>
#include "lp_lib.h"

void __WINAPI msgfunction(lprec *lp, void *userhandle, int msg)
{
 switch(msg) {
 case MSG_LPFEASIBLE:
  printf("Feasible solution found\n");
  break;
 case MSG_MILPFEASIBLE:
  printf("Integer feasible solution found\n");
  break;
 case MSG_MILPBETTER:
  printf("Better integer feasible solution found\n");
  break;
 }
}

int main(void)
{
  lprec *lp;

  /* Create a new LP model */
  lp = make_lp(0, 0);
  if(lp == NULL) {
    fprintf(stderr, "Unable to create new LP model\n");
    return(1);
  }

  put_msgfunc(lp, msgfunction, NULL, MSG_LPFEASIBLE | MSG_MILPFEASIBLE | MSG_MILPBETTER);

  delete_lp(lp);
  return(0);
}

lp_solve API reference

See Also make_lp, copy_lp, copy_lp, read_lp, read_LP, read_mps, read_freemps, read_MPS, read_freeMPS, read_XLI, put_abortfunc