NX二次開發-C++多執行緒技術做exe外部開發(批量匯出PDF圖紙例子)
阿新 • • 發佈:2020-10-24
NX11+VS2013 /***************************************************************************** ** ** NX11_Open_Wizard1.cpp ** ** Description: ** Main file for the application. ** *****************************************************************************/ /* Include files */ #include <stdarg.h> #include<strstream> #include <iostream> using std::ostrstream; using std::endl; using std::ends; using std::cerr; #include <uf.h> #include <uf_ui_types.h> //標頭檔案 #include <afxwin.h> #include <windows.h> #include <uf.h> #include <uf_part.h> #include <uf_defs.h> #include<NXOpen/NXException.hxx> #include <NXOpen/Session.hxx> #include <NXOpen/BasePart.hxx> #include <NXOpen/Builder.hxx> #include <NXOpen/Drawings_DrawingSheet.hxx> #include <NXOpen/Drawings_DrawingSheetCollection.hxx> #include <NXOpen/NXObject.hxx> #include <NXOpen/Part.hxx> #include<NXOpen/PartCollection.hxx> #include <NXOpen/PlotManager.hxx> #include <NXOpen/PlotSourceBuilder.hxx> #include <NXOpen/PrintPDFBuilder.hxx> #include <NXOpen/Session.hxx> using namespace NXOpen; /* Main routine */ extern void main( char argc, char *argv[] ) { /* Initialize the API environment */ UF_initialize(); /* TODO: Add your application code here */ //調exe傳入引數 LPWSTR *szArglist = NULL; int nArgs = 0; szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); if (nArgs > 1) { CString str1 = szArglist[1]; //開啟prt tag_t PartTag = NULL_TAG; UF_PART_load_status_t ErrorStatus; UF_PART_open("D:\\2\\1.prt", &PartTag, &ErrorStatus); NXOpen::Session *theSession = NXOpen::Session::GetSession(); NXOpen::Part *workPart(theSession->Parts()->Work()); NXOpen::Part *displayPart(theSession->Parts()->Display()); NXOpen::PrintPDFBuilder *printPDFBuilder1; printPDFBuilder1 = workPart->PlotManager()->CreatePrintPdfbuilder(); printPDFBuilder1->SetScale(1.0); printPDFBuilder1->SetSize(NXOpen::PrintPDFBuilder::SizeOptionScaleFactor); printPDFBuilder1->SetUnits(NXOpen::PrintPDFBuilder::UnitsOptionEnglish); printPDFBuilder1->SetXDimension(8.5); printPDFBuilder1->SetYDimension(11.0); printPDFBuilder1->SetOutputText(NXOpen::PrintPDFBuilder::OutputTextOptionPolylines); printPDFBuilder1->SetRasterImages(true); printPDFBuilder1->SetWatermark(""); std::vector<NXOpen::NXObject *> sheets1(1); NXOpen::Drawings::DrawingSheet *drawingSheet1(dynamic_cast<NXOpen::Drawings::DrawingSheet *>(workPart->DrawingSheets()->FindObject("Sheet 1"))); sheets1[0] = drawingSheet1; printPDFBuilder1->SourceBuilder()->SetSheets(sheets1); char msg[256]; sprintf_s(msg, "D:\\2\\%s.pdf", (LPSTR)(LPCTSTR)str1); printPDFBuilder1->SetFilename(msg); NXOpen::NXObject *nXObject1; nXObject1 = printPDFBuilder1->Commit(); printPDFBuilder1->Destroy(); //關閉prt UF_PART_close(PartTag, 1, 1); } //取得引數後,釋放CommandLineToArgvW申請的空間 LocalFree(szArglist); /* Terminate the API environment */ UF_terminate(); } /***************************************************************************** ** Utilities *****************************************************************************/ Caesar盧尚宇 2020年10月24日
VS2013 #include <stdio.h> #include <windows.h> DWORD WINAPI ThreadProc1(LPVOID lpParameter) { printf("執行緒1開始\n"); int* p = (int*)lpParameter;//傳入引數轉換 for (int i = 0; i < 10; i++) { printf(".\n"); char msg[256]; sprintf_s(msg, "D:\\2\\1.exe %d", *p); system(msg); (*p)++; } printf("執行緒1結束\n"); return 0; } DWORD WINAPI ThreadProc2(LPVOID lpParameter) { printf("執行緒2開始\n"); int* p = (int*)lpParameter;//傳入引數轉換 for (int i = 0; i < 10; i++) { printf(".\n"); char msg[256]; sprintf_s(msg, "D:\\2\\1.exe %d", *p+10); system(msg); (*p)++; } printf("執行緒2結束\n"); return 0; } void main() { int a = 0;//傳入執行緒函式的引數,不需傳遞引數時為NULL int b = 0; //建立執行緒1 DWORD lpThreadId1 = 0;//傳出引數,用於獲得執行緒ID,如果為NULL則不返回 HANDLE hThread1 = CreateThread(NULL, 0, ThreadProc1, &a, 0, &lpThreadId1); //WaitForSingleObject(hThread1, INFINITE);//等待單個物件 //建立執行緒2 DWORD lpThreadId2 = 0; HANDLE hThread2 = CreateThread(NULL, 0, ThreadProc2, &b, 0, &lpThreadId2); getchar(); } Caesar盧尚宇 2020年10月24日
VS2013 #include <stdio.h> #include <windows.h> /* HANDLE WINAPI CreateThread( LPSECURITY_ATTRIBUTES lpThreadAttributes, //執行緒安全相關的屬性,常置為NULL SIZE_T dwStackSize, //新執行緒的初始化棧在大小,可設定為0 LPTHREAD_START_ROUTINE lpStartAddress, //被執行緒執行的回撥函式,也稱為執行緒函式 LPVOID lpParameter, //傳入執行緒函式的引數,不需傳遞引數時為NULL DWORD dwCreationFlags, //控制執行緒建立的標誌 LPDWORD lpThreadId //傳出引數,用於獲得執行緒ID,如果為NULL則不返回執行緒ID ); */ DWORD WINAPI ThreadProc1(LPVOID lpParameter) { int* p = (int*)lpParameter;//傳入引數轉換 for (int i = 0; i < 10; i++) { printf("%d\n", *p); (*p)++; Sleep(1000); } return 0; } DWORD WINAPI ThreadProc2(LPVOID lpParameter) { for (int i = 0; i < 10; i++) { printf("%d\n", i); Sleep(1000); } return 0; } void main() { int a = 0;//傳入執行緒函式的引數,不需傳遞引數時為NULL //建立執行緒1 DWORD lpThreadId1 = 0;//傳出引數,用於獲得執行緒ID,如果為NULL則不返回 HANDLE hThread1 = CreateThread(NULL, 0, ThreadProc1, &a, 0, &lpThreadId1); //WaitForSingleObject(hThread1, INFINITE);//等待單個物件 //建立執行緒2 DWORD lpThreadId2 = 0; HANDLE hThread2 = CreateThread(NULL, 0, ThreadProc2, &a, 0, &lpThreadId2); getchar(); } Caesar盧尚宇 2020年10月24日