📄 main.c
字号:
#include "windows.h"
#include "fsmdefs.h"
#include "stdio.h"
#include "fsmapi.h"
volatile BOOL MainThreadExit;
/* Add for Calling Simulator */
extern int MainInit();
extern int StartWorking();
extern int QuitFromSystem();
uint32 FsmSystemInit(void * start, uint32 size);
uint32 FsmSystemExit(void);
DWORD WINAPI ThreadProcHighest(LPVOID lpParameter);
DWORD WINAPI ThreadProcHigh(LPVOID lpParameter);
DWORD WINAPI ThreadProcNormal(LPVOID lpParameter);
DWORD WINAPI ThreadProcLow(LPVOID lpParameter);
DWORD WINAPI ThreadProcLowest(LPVOID lpParameter);
HANDLE hThreadHighest;
HANDLE hThreadHigh;
HANDLE hThreadNormal;
HANDLE hThreadLow;
HANDLE hThreadLowest;
volatile uint8 FsmStarting = FALSE;
int main()
{
DWORD status;
/*
HANDLE hThreadHighest;
HANDLE hThreadHigh;
HANDLE hThreadNormal;
HANDLE hThreadLow;
HANDLE hThreadLowest;*/
HANDLE hThread[5];
DWORD threadId = 0;
printf("\npress any key to exit");
// MainInit();
status = FsmSystemInit(0, 0);
if(status != 0)
{
printf("\nfailre on init : %x", status);
return 1;
}
// StartWorking();
// QuitFromSystem();
#if 0
SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST);
MainThreadExit = FALSE;
/* hThreadLowest = CreateThread(NULL,
0,
ThreadProcLowest,
NULL,
CREATE_SUSPENDED,
&threadId
);
hThreadLow = CreateThread(NULL,
0,
ThreadProcLow,
NULL,
CREATE_SUSPENDED,
&threadId
);
hThreadNormal = CreateThread(NULL,
0,
ThreadProcNormal,
NULL,
CREATE_SUSPENDED,
&threadId
);
*/
hThreadHigh = CreateThread( NULL,
0,
ThreadProcHigh,
NULL,
CREATE_SUSPENDED,
&threadId
);
/*
hThreadHighest = CreateThread(NULL,
0,
ThreadProcHighest,
NULL,
CREATE_SUSPENDED,
&threadId
);
*/
SetThreadPriority(hThreadHighest, THREAD_PRIORITY_HIGHEST);
SetThreadPriority(hThreadHigh, THREAD_PRIORITY_ABOVE_NORMAL);
SetThreadPriority(hThreadNormal, /*THREAD_PRIORITY_NORMAL*/THREAD_PRIORITY_ABOVE_NORMAL);
SetThreadPriority(hThreadLow, /*THREAD_PRIORITY_BELOW_NORMAL*/THREAD_PRIORITY_HIGHEST);
SetThreadPriority(hThreadLowest, THREAD_PRIORITY_LOWEST);
ResumeThread(hThreadLowest);
Sleep(20);
ResumeThread(hThreadLow);
Sleep(20);
ResumeThread(hThreadNormal);
Sleep(20);
ResumeThread(hThreadHigh);
Sleep(20);
ResumeThread(hThreadHighest);
hThread[0] = hThreadLowest;
hThread[1] = hThreadLow;
hThread[2] = hThreadNormal;
hThread[3] = hThreadHigh;
hThread[4] = hThreadHighest;
getchar();
#endif
MainThreadExit = TRUE;
printf("\nWait for all thread terminate!");
WaitForMultipleObjects(5, hThread, TRUE, INFINITE);
printf("\nExit from main()");
FsmSystemExit();
return 0;
}
DWORD WINAPI ThreadProcHighest(LPVOID lpParameter)
{
DWORD status;
DWORD fd;
int i;
BYTE testdata[128];
printf("\nEnter Thread Highest");
fd = FsmOpen("testv\\window\\testfile2", FSM_CREATE_NEW | FSM_OPEN_WRITE | FSM_OPEN_READ);
if(fd == INVALID_FILE_HANDLE)
{
printf("\n Create file \\window\\testfile2 failure!");
return 1;
}
for(i = 0; i < 128; i++)
{
testdata[i] = i;
}
for(i = 0; i < 512; i++)
{
if(MainThreadExit)
{
printf("\nMain Thread exit!");
break;
}
status = FsmWrite(fd, testdata, 128);
if(status != 128)
{
printf("\nWrite file \\window\\testfile2 failure, have written %d bytes to it!", 26 * i);
FsmClose(fd);
return 1;
}
Sleep(30);
}
FsmClose(fd);
printf("\n%x bytes have been written to \\window\\testfile2!", i * 128);
printf("\nExit Thread Highest");
return 0;
}
DWORD WINAPI ThreadProcHigh(LPVOID lpParameter)
{
HENUM hEnum;
FsmFileInfoT FileInfo;
HANDLE hThread[4];
hThread[0] = hThreadLowest;
hThread[1] = hThreadLow;
hThread[2] = hThreadNormal;
hThread[3] = hThreadHighest;
printf("\nEnter Thread High");
// WaitForMultipleObjects(4, hThread, TRUE, INFINITE);
printf("\n all thread except high-thread have exited");
hEnum = FsmFindFirstFile("testv\\*", &FileInfo);
if(hEnum == NULL)
{
printf("\nFindFirst failed");
return 1;
}
printf("\n %s,\t\t\t Len = %d Bytes", FileInfo.FileName, FileInfo.FileLength);
while(FsmFindNextFile(hEnum, &FileInfo) != ERR_NOTEXIST)
{
printf("\n %s,\t\t\t Len = %d Bytes", FileInfo.FileName, FileInfo.FileLength);
if(MainThreadExit)
{
printf("\nMain Thread exit!");
break;
}
}
FsmFindClose(hEnum);
printf("\nExit Thread High");
return 0;
}
DWORD WINAPI ThreadProcNormal(LPVOID lpParameter)
{
DWORD status;
DWORD fd;
int i;
BYTE testdata[128];
printf("\nEnter Thread Normal");
status = FsmMakeDir("testv\\window");
if(status != 0)
{
printf("\nMake directory \\window failure!");
; return 1;
}
if(MainThreadExit)
{
printf("\nMain Thread exit!");
return 1;
}
status = FsmMakeDir("testv\\window\\test");
if(status != 0)
{
printf("\nMake directory \\window\\test failure!");
; return 1;
}
if(MainThreadExit)
{
printf("\nMain Thread exit!");
return 1;
}
status = FsmMakeDir("testv\\testdir");
if(status != 0)
{
printf("\nMake directory \\testdir failure!");
; return 1;
}
if(MainThreadExit)
{
printf("\nMain Thread exit!");
return 1;
}
fd = FsmOpen("testv\\testdir\\testfile", FSM_CREATE_NEW | FSM_OPEN_WRITE | FSM_OPEN_READ);
if(fd == INVALID_FILE_HANDLE)
{
printf("\n Create file \\testdir\\testfile failure!");
return 1;
}
for(i = 0; i < 26; i++)
{
testdata[i] = 'A' + i;
}
for(i = 0; i < 1024; i++)
{
if(MainThreadExit)
{
printf("\nMain Thread exit!");
break;
}
status = FsmWrite(fd, testdata, 26);
if(status != 26)
{
printf("\nWrite file \\testdir\\testfile failure, have written %d bytes to it!", 26 * i);
FsmClose(fd);
return 1;
}
Sleep(30);
}
FsmClose(fd);
printf("\n%x bytes have been written to \\testdir\\testfile!", i * 26);
printf("\nExit Thread Normal");
return 0;
}
DWORD WINAPI ThreadProcLow(LPVOID lpParameter)
{
DWORD status;
DWORD fd;
int i = 0;
BYTE testdata[2048];
printf("\nEnter Thread Low");
fd = FsmOpen("testv\\testfile", FSM_OPEN_EXISTING | FSM_OPEN_WRITE | FSM_OPEN_READ);
if(fd == INVALID_FILE_HANDLE)
{
printf("\n Create file \\testfile failure!");
return 1;
}
status = FsmSeek(fd, 0, FSM_FILE_END);
if(status != 0)
{
printf("\n Seek failure");
FsmClose(fd);
return 1;
}
printf("\n Seek end");
status = FsmWrite(fd, testdata, 600);
if(status != 600)
{
printf("\nWrite failure %d", status);
}
FsmClose(fd);
return 0;
/*
status = FsmTruncate(fd, 2048);
if(status != 0)
{
printf("\n truncate failure!");
}
FsmClose(fd);
*/
/*
fd = FsmOpen("testv\\testfile", FSM_CREATE_NEW | FSM_OPEN_WRITE | FSM_OPEN_READ);
if(fd == INVALID_FILE_HANDLE)
{
printf("\n Create file \\testfile failure!");
return 1;
}
for(i = 0; i < 26; i++)
{
testdata[i] = 'a' + i;
}
for(i = 0; i < 32; i++)
{
if(MainThreadExit)
{
printf("\nMain Thread exit!");
break;
}
status = FsmWrite(fd, testdata, 1024);
if(status != 1024)
{
printf("\nWrite file \\testfile failure, have written %d bytes to it!", 26 * i);
FsmClose(fd);
return 1;
}
Sleep(30);
}
FsmClose(fd);
printf("\n%x bytes have been written to \\testfile!", i * 26);
*/
printf("\nExit Thread Low");
return 0;
}
DWORD WINAPI ThreadProcLowest(LPVOID lpParameter)
{
DWORD status;
DWORD fd;
int i;
BYTE testdata[128];
printf("\nEnter Thread Lowest");
fd = FsmOpen("testv\\window\\test\\testfile2", FSM_CREATE_NEW | FSM_OPEN_WRITE | FSM_OPEN_READ);
if(fd == INVALID_FILE_HANDLE)
{
printf("\n Create file \\window\\test\\testfile2 failure!");
return 1;
}
for(i = 0; i < 10; i++)
{
testdata[i] = '0' + i;
}
for(i = 0; i < 1024; i++)
{
if(MainThreadExit)
{
printf("\nMain Thread exit!");
break;
}
status = FsmWrite(fd, testdata, 10);
if(status != 10)
{
printf("\nWrite file \\window\\test\\testfile2 failure, have written %d bytes to it!", 26 * i);
FsmClose(fd);
return 1;
}
Sleep(30);
}
FsmClose(fd);
printf("\n%x bytes have been written to \\window\\test\\testfile2!", i * 26);
printf("\nExit Thread Lowest");
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -