Wie kann ich die Timeout-Ausnahme in einer dritten dll Funktion fangen, ich c Sprache in Windows verwendenWie kann ich die Timeout-Ausnahme in einer dritten dll Funktion fangen, verwende ich c Sprache in Windows
ich fangen wollen ein Timeout Ausnahme beim Aufruf einer dritten DLL-Funktion, wissen Sie, dass die Funktion eine lange Zeit braucht, und ich brauche einen Wert in begrenzter Zeit, wenn es nicht in der Zeit zurückgibt, gebe ich ihm einen Standardwert.
Ich muss so viele Informationen suchen, aber es funktioniert nicht. Ich erhalte die zwei Punkte:
1.use die Alarm Funktion, aber es nur in Linux arbeitet, kann ich es nicht in Windows verwenden, selbst verwende ich die MinGW standartisierten GCC Compiler.
2.use der TimeSetEvent Funktion und der setjmp/longjmp Funktion in die drei Funktion vielleicht so geschlossen, es zu nehmen work.but ich sie verwenden, um die programe Dump verursacht, erscheint Fenster ein DialogMessage etwas sagen falsch .
ich den Code und das Bild wie folgt geben:
`
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <setjmp.h>
jmp_buf j;
/**
* 时间中断函数
*/
void PASCAL OneMilliSecondProc(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dwl, DWORD dw2) {
printf("Timout!\n");
longjmp(j,1);
}
int longTimeFunction(){
while (1) {
printf("operating...\n");
Sleep(1000);
}
return 0;
}
int main(){
HANDLE hHandle;
UINT wTimerRes_1ms;//定义时间间隔
UINT wAccuracy; //定义分辨率
UINT TimerID_1ms; //定义定时器句柄
wTimerRes_1ms = 5000;
if((TimerID_1ms = timeSetEvent(
wTimerRes_1ms,
wAccuracy,
(LPTIMECALLBACK)OneMilliSecondProc, // 回调函数
(DWORD)(1), // 用户传送到回调函数的数据;
TIME_PERIODIC//周期调用定时处理函数
)) == 0) {
printf("start!!!!!!!!!!!\n");
} else {
printf("end!!!!!!!!!!!\n");
}
int temp = 0;
if(setjmp(j) == 0){
temp = longTimeFunction();
}else{
printf("xxxxxx...\n");
temp = -1;
}
printf("%d\n", temp);
return 0;
}
Wie wäre es mit: '' 'HANDLE longTimeFunctionHandle = CreateThread (NULL, 0, longTimeFunction, NULL, 0, NULL); WaitForSingleObject (longTimeFunctionHandle, 200); '' ' – newflypig
@newflypig [Bitte lesen] (http://stackoverflow.com/questions/4149146/why-and-when-shouldnt-i-kill-a-thread/4149210#4149210). Wenn es wirklich keinen Weg gibt, 'TerminateThread' zu nennen, zerlegen Sie die Funktion und prüfen Sie, ob der Abbruch sicher ist. Was macht die Funktion? – a3f
Die Funktion versuchen, eine Verbindung zu einer CNC-Maschine mit Ethernet herzustellen. – newflypig