Found the cause, it was the parser. I noticed after opening a project it started a thread for the parser so I tried turning off process complex macros and it stopped freezing.
On another note why are threads doing the job of something that should be passed to an executable?
An executable can write the info to a temporary file that the thread can then read WITHOUT freezing up.
Can just use a simple bool at start of each file to confirm weather it is ready for thread to use, in mean time thread can use old file.
E.g.
parser.exe FILE_PATH~parserINDEX~
where INDEX refers to 0 - 9 (when hit 9 just reset to 0)
parserThread:
FILE *useParserFile = oldParserFile;
// oldParserFile will use INDEX - 1 or 9 if INDEX = 0
bool nxtParser = false;
fseek( nxtParserFile, 0, SEEK_SET );
fread( nxtParserFile, &nxtParser, 1, 1 );
if ( nxtParser )
useParserFile = nxtParserFile;
if ( !useParserFile )
return;
// Continue as normal