반응형

1. 증상

  • 아래와 같이 설치 실패가 되는 경우가 있다.


2. 해결방법

  • CUDA 체크트리에서 Nsight VSE (visual studio edition) 체크하지 않음


3. NSight Visual Studio Edition 설치하기 (1/2)

 

Gameworks Download Center

No downloads meet your criteria.

developer.nvidia.com

 

  • 다운받은 파일을 설치진행한다.


4. NSight Integration 설치 (2/2)

  • 체크되지않은 설치목록은 Visual Studio 프로그램 내 "확장관리" 에서 다운받는다.

1) Visual Studio 프로그램 상단 메뉴 "확장" 메뉴 선택

 

2) NSight 검색 후 다운로드

 

3) Visual Studio 닫기 → 자동설치

4) Visual Studio 재실행 → 상단 "확장" 메뉴 확인

 

5) 설치완료


감사합니다.

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 


 

반응형
반응형

1. 환경구성

  • 운영체제 : Windows 10 pro 22H2
  • 하드웨어
    - 현재 구성으로 GPU1은 디스플레이용, GPU2는 컴퓨팅용
CPU 라이젠7 3700X
GPU1 라데온 RX570
GPU2 NVIDIA Geforce T400 4GB
  • 설치할 CUDA toolkit 버전 : CUDA toolkit 12.3 update 2

 

2. NVIDIA 그래픽카드 드라이버 설치

  • CUDA 프로그래밍을 하기 위해 NVIDIA사 그래픽카드를 사용하여야 한다.

1) NVIDIA 그래픽카드 드라이버 다운로드
- https://www.nvidia.co.kr/Download/index.aspx?lang=kr

 

Download the latest official NVIDIA drivers

Download the latest official NVIDIA drivers

www.nvidia.com

 

2) 그래픽카드 선택 및 검색

 

3) 다운로드 후 설치(설치과정생략)
- 설치는 기본옵션으로 설치함


3. CUDA toolkit 버전 지원 확인

 

CUDA - Wikipedia

From Wikipedia, the free encyclopedia Parallel computing platform and programming model Compute Unified Device Architecture (CUDA) is a parallel computing platform and application programming interface (API) that allows software to use certain types of gra

en.wikipedia.org

  • 아래 그림은 GPU 아키텍처별 지원가능한 CUDA toolkit 버전을 표시하고 있다.
    예) NVIDIA Geforce T400 4GB 그래픽카드인 경우 GPU 아키텍처는 "Turing" 이므로 CUDA toolkit 버전은 10.0 ~ 10.2을 볼 수 있다.
  • 연두색 블럭CUDA toolkit버전마다 지원가능한 GPU아키텍처를 표시된다. 현재 Turing GPU 아키텍처는 CUDA toolkit 12.4까지 지원이 가능하는 것을 볼 수 있다.


4. CUDA toolkit 설치

1) CUDA toolkit 다운로드 홈페이지 접속 후 해당 버전 선택하기
- https://developer.nvidia.com/cuda-toolkit-archive 

 

CUDA Toolkit Archive

Previous releases of the CUDA Toolkit, GPU Computing SDK, documentation and developer drivers can be found using the links below. Please select the release you want from the list below, and be sure to check www.nvidia.com/drivers for more recent production

developer.nvidia.com

 

2) 타겟 플랫폼 선택 후 다운로드

 

3) 설치하기(설치과정생략)
- 설치 오류 시 아래 링크 클릭

2024.04.19 - [C++/CUDA] - [C++/CUDA] NVIDIA installer failed, CUDA 설치 오류(VisualStudio)

 

[C++/CUDA] NVIDIA installer failed, CUDA 설치 오류(VisualStudio)

1. 증상 아래와 같이 설치 실패가 되는 경우가 있다. 2. 해결방법 CUDA 체크트리에서 Nsight VSE (visual studio edition) 체크하지 않음 3. NSight Visual Studio Edition 설치하기 (1/2) 체크되지않은 설치목록은 NVIDIA

manbedded.tistory.com

 

4) 설치완료 및 버전확인


5. 예제소스 실행 1

1) NVIDIA에서 제공하는 CUDA예제소스 다운로드
- https://github.com/NVIDIA/cuda-samples 

 

GitHub - NVIDIA/cuda-samples: Samples for CUDA Developers which demonstrates features in CUDA Toolkit

Samples for CUDA Developers which demonstrates features in CUDA Toolkit - NVIDIA/cuda-samples

github.com

 

2) 다운받은 CUDA예제소스 압축파일 풀기

3) 예제소스 실행
- cuda-samples-master → Samples → 1_Utilities → deviceQuery
- 설치된 Visual Studio 버전에 맞게 .sln 실행하기

 

4) 실행결과
- GPU 장치확인, CUDA toolkit 버전, CUDA코어 개수 확인


6. 예제소스 실행 2

1) 예제소스

#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <iostream>

#define N 1024*1024*1024

__global__ void vector_add_gpu(float *out, float *a, float *b, int n) {
    for(int i = 0; i < n; i++){
        out[i] = a[i] + b[i];
    }
}


__host__ void vector_add_cpu(float *out, float *a, float *b, int n) {
    for(int i = 0; i < n; i++){
        out[i] = a[i] + b[i];
    }
}

int main(){
    float *a, *b, *out; 

    // Allocate memory
    a   = (float*)malloc(sizeof(float) * N);
    b   = (float*)malloc(sizeof(float) * N);
    out = (float*)malloc(sizeof(float) * N);

    for(int i = 0; i < N; i++){
        if(i==0){
            a[i] = 2.0001f;
            b[i] = 2.0001f;
        }else{
            b[i] = 2.0001f;
            a[i] = 2.0002f + a[i-1];
        }
    }

    time_t start, end;
    start = clock();
    vector_add_cpu(out, a, b, N);
    end = clock();
    printf("CPU elapsed time:%d, result:%f\n", (int)(end-start), a[N-1]);


    // Main function
    start = clock();
    vector_add_gpu<<<1,1>>>(out, a, b, N);
    end = clock();
    printf("GPU elapsed time:%d, result:%f\n", (int)(end-start), a[N-1]);

    free(a  );
    free(b  );
    free(out);

    return 1;
}

 

2) 결과
- CPU 경과시간 : 884ms
- GPU 경과시간 : 116ms


감사합니다.

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 


 

반응형
반응형

1. MPI(Message Passing Interface)

  • 메시지 전달 인터페이스
  • 분산 메모리 장치에서 프로그래밍하는 방법, 모든 병렬 프로세스가 다른 프로세스와 독립된 상태에서 자체 메모리 공간에서 병렬처리 발생
    (참고: https://stackoverflow.com/questions/32464084/what-are-the-differences-between-mpi-and-openmp)
  • MS-MPI 라이브러리 사용 권장
    - MPICH 라이브러리를 Window에서 사용할 수 있도록 MS사에서 만듦
  • 코드로 제어 불가능. 부분 병렬처리 불가능
 

What are the differences between MPI and OpenMP?

I would like to know (in a few words) what are the main differences between OpenMP and MPI.

stackoverflow.com

 

2. 환경구축

 

Microsoft-MPI/examples/helloworld/Run_MPIHelloWorld.md at master · microsoft/Microsoft-MPI

Microsoft MPI. Contribute to microsoft/Microsoft-MPI development by creating an account on GitHub.

github.com

 

1) Microsoft MPI 다운로드 및 설치
- https://www.microsoft.com/en-us/download/details.aspx?id=100593

 

2) 환경 변수 확인 : 명령프로프트 관리자 권한으로 실행 (set MSMPI 입력)

 

3) Visual studio 프로젝트 생성

4) 프로젝트 설정(C/C++ → General)
- 현재 플랫폼 32/64-bit 주의.
- C/C++ → General à Additional Include Directories →  $(MSMPI_INC);$(MSMPI_INC)\x64 입력 (64-bit)
- C/C++ →  General à Additional Include Directories →  $(MSMPI_INC);$(MSMPI_INC)\x86 입력 (32-bit)

 

5) 프로젝트 설정(Linker  General)
- 현재 플랫폼 32/64-bit 주의.
- Linker  General  Additional Library Directories  $(MSMPI_LIB64) 입력 (64-bit)
- Linker  General  Additional Library Directories  $(MSMPI_LIB32) 입력 (32-bit)

 

6) 프로젝트 설정(Linker  Input)
- Linker  Input  Additional Dependencies  msmpi.lib 입력

 

3. 테스트

#include <iostream>
#include <mpi.h>

using namespace std;

int main(void)
{
    int my_rank;
	int world_size;

	MPI_Init(NULL, NULL);

	MPI_Comm_size(MPI_COMM_WORLD, &world_size);
	MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

	std::cout << "Hello World from process " << my_rank << " out of " << world_size << " processes!!!" << std::endl;

	MPI_Finalize();

    cout << "Finished" << endl;

    getchar();
    
    return 0;
}

 

4. 실행

1) 관리자권한으로 명령프롬프트 실행

 

2) 빌드된 프로그램 폴더 경로 설정 및 실행
- $ cd 명령어로 경로 설정
- C:드라이브에서 D:드라이브로 경로 설정 시 d:입력
- $ mpiexec –n 20 MSMPI.exe 입력

 

5. 문법

  • 버전확인
// MPI 버전
int ver;
int subVer;
MPI_Get_version(&ver, &subVer);

// MPI 라이브러리 버전
char cVer[32];
int len;
MPI_Get_library_version(cVer, &len);

감사합니다.

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 


 

반응형
반응형

1. OpenMP (Multi-processing)

  • 각 스레드나 프로세스가 제약없이 메모리를 액세스할 수 있도록 설계되어 있음
  • 개발자가 병렬로 실행될 코드의 블록만을 간단하게 설정하고, 세밀한 제어는 컴파일이나 런타임 시스템에게 맡기는 방식
  • 컴파일러나 런타임 시스템이 스레드의 디테일한 동작을 제어하기 때문에 간단하게 구현 할 수 있음.

 

2. OpenMP vs pthreads

OpenMP pthreads
개발자가 병렬로 실행될 코드의 블록만 설정 개발자가 명시적으로 각 스레드의 형태 설정
컴파일러나 런타임 시스템이 스레드의 세밀한 동작을 제어함 Low Level로 thread의 실행 형태를 세밀하게 제어 할 수 있음
코드를 간단하게 사용할 수 있음(쉬움) 용도에 따라 구현이 필요함(어려움)

 

3. 환경구축

  • Windows 10 pro, visual studio 2013 pro

 

4. 테스트

  • 싸인파 예제소스 fftSize=256K 
  • 병렬 OFF (75msec)

 

  • 병렬 ON (16msec)

 

5. 문법

  • num_threads를 생략하면, 현재 PC의 CPU 논리프로세서의 수만큼 스레드를 실행함.
#pragma omp parallel for  or  #pragma omp parallel for num_threads(thrMAX)
#pragma omp parallel  or  #pragma omp parallel num_threads(thrMAX)
#pragma omp parallel
{
	// 현재 블록은 parallel 모드 상태, parallel 생략함
    #pragma omp critical
    #pragma omp for
    #pragma omp atomic
}

 

  • for문
// for문 문법
#pragma omp parallel for
#pragma omp parallel for num_threads(thrMAX)
//-----------------------------

// example
#pragma omp parallel for ( num_threads(8) )
for(int n=0; n<fftSize; n++){
    data[n] = lib.expj(2.0*PI/fftSize*freq*n) + lib.gen_cnormal();
}

 

  • 블록단위
// 블록단위
#pragma omp parallel
#pragma omp parallel num_threads(thrMAX)
//---------------------------

// example
#pragma omp parallel //  num_threads(numThr)
{
	int rank = omp_get_thread_num();
	int numCntThr = omp_get_num_threads();
	printf("rank=%d, numCntThr=%d\n", rank, numCntThr);
}

 

  • 크리티컬섹션 1
    - 연간, 공유 변수 접근 시 사용
    - 지원되는 종류만 사용 가능, 불가능한 경우 critical로 대체

// critical section
#pragma omp atomic
//-------------------------

// example
int shareCnt = 0;
#pragma omp parallel
{
	#pragma omp atomic
	shareCnt ++;
}

 

  • 크리티컬섹션 2
// critical section
#pragma omp critical
// ------------------------

// example
int shareCnt = 0;
#pragma omp parallel
{
	#pragma omp critical
	{
		shareCnt += 1;
	}
}

감사합니다.

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 


 

반응형
반응형

DELL POWER EDGE R240, 250


1. ISO 파일 다운로드

https://www.microsoft.com/ko-kr/evalcenter/download-windows-server-2019

 

2. 부팅 USB 만들기

Rufus 오픈 유틸리티를 사용하여 부팅 USB를 만들어주세요.

https://rufus.ie/ko/

 

Rufus - 간편하게 부팅 가능한 USB 드라이브 만들기

Rufus는 USB 메모리 및 플래시 드라이브를 포맷하고 부팅할 수 있도록 만드는 도구입니다. 이 페이지 아래에 나열된 ISO 이미지 이외에도 Rufus는 여러 종류의 ISO 이미지를 지원합니다. (1) Windows 8 이

rufus.ie

 

3. 부팅 우선순위 변경

1) 서버PC ON → BIOS 진입 (System Setup)

 

2) System BIOS 선택  UEFI Boot Settings 선택  UEFI Boot Sequence 선택  우선순위설정

 

3) 오른쪽 상단 “Exit” 클릭 저장대화창 “Yes” 버튼 클릭 서버PC 재부팅함.

 

4. OS설치

 

5. 현재 버전확인 및 변경

실행창 → winver 입력 엔터 → OS설치완료 시 "Windows Server 2019 Statndard Evaluation" 뜸

 

6. 버전 변경

1)  윈도우 → powerShell 입력 → powerShell 열기

 

2) 명령어 입력

dism /online /set-edtion:serverstandard /productkey:(setupkey) /accepteula (setupkey)

(setupkey) 에 아래 setup key 펼쳐 원하는 윈도우서버 버전을 입력하세요↓

더보기

Windows Server Client Setup Keys

Windows Server 2022 Datacenter : WX4NM-KYWYW-QJJR4-XV3QB-6VM33

Windows Server 2022 Standard : VDYBN-27WPP-V4HQT-9VMD4-VMK7H

Windows Server 2019 DatacenterWMDGN-G9PQG-XVVXX-R3X43-63DFG

Windows Server 2019 Standard : N69G4-B89J2-4G8F4-WWYCC-J464C

Windows Server 2019 Essentials : WVDHN-86M7X-466P6-VHXV7-YY726

Windows Server 2016 DatacenterCB7KF-BWN84-R7R2Y-793K2-8XDDG

Windows Server 2016 Standard : WC2BQ-8NRM3-FDDYY-2BFGV-KHKQY

Windows Server 2016 Essentials : JCKRF-N37P4-C2D82-9YXRT-4M63B

Windows Server 2012 R2 Standard : D2N9P-3P6X9-2R39C-7RTCD-MDVJX

Windows Server 2012 R2 Datacenter : W3GGN-FT8W3-Y4M27-J84CP-Q3VJ9

Windows Server 2012 R2 Essentials : KNC87-3J2TX-XB4WP-VCPJV-M4FWM

Windows Server 2012 : BN3D2-R7TKB-3YPBD-8DRP2-27GG4

Windows Server 2012 N : 8N2M2-HWPGY-7PGT9-HGDD8-GVGGY

Windows Server 2012 Single Language : 2WN2H-YGCQR-KFX6K-CD6TF-84YXQ

Windows Server 2012 Country Specific : 4K36P-JN4VD-GDC6V-KDT89-DYFKP

Windows Server 2012 Standard : XC9B7-NBPP2-83J2H-RHMBY-92BT4

Windows Server 2012 MultiPoint Standard : HM7DN-YVMH3-46JC3-XYTG7-CYQJJ

Windows Server 2012 MultiPoint Premium : XNH6W-2V9GX-RGJ4K-Y8X6F-QGJ2G

Windows Server 2012 Datacenter : 48HP8-DN98B-MYWDG-T2DCC-8W83P

 

6. 서버PC 재부팅

 

7. Windows Server 버전 확인

 


감사합니다.

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 


 

반응형

'Setting > Windows' 카테고리의 다른 글

[CMD] 명령프롬프트 타이머 프로그램 실행 (timeout)  (1) 2023.10.09
반응형

QString 문자열에서 자료형 변환 예제모음. (QString to data type)

자료형에서 QString 변환 예제모음. (data type to QString)


 

QString -> int

// Convert QString to int

QString in_qstr = "2147483647";
int out_value = in_qstr.toInt();
printf("%d\n", out_value); 
// result(int) : 2147483647

 

 

int -> QString

// Convert int to QString

int in_value = 2147483647;
QString out_qstr = QString::number(in_value);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : 2147483647

 

QString -> long long

// convert QString to long long
        
QString in_qstr = "9223372036854775807";
long long out_value = in_qstr.toLongLong();
printf("%llu\n", out_value);
// result(long long) : 9223372036854775807

 

long long -> QString

// convert long long to QString

long long in_value = 9223372036854775807;
QString out_qstr = QString::number(in_value);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : 9223372036854775807

 

QString -> double (precision)

// convert QString to double(precision)

QString in_qstr = "3.14";
double out_value = in_qstr.toDouble();
printf("%lf\n", out_value);
// result(double) : 3.140000

 

double (precision) -> QString

// convert double(precision) to QString

double in_value = 3.14;
int precision = 1;
QString out_qstr = QStringLiteral("%1").arg(in_value, 0, 'f', precision);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : 3.1

 

QString -> float (precison)

// convert QString to float(precision)

float in_value = 3.14;
int precision = 2;
QString out_qstr = QStringLiteral("%1").arg(in_value, 0, 'f', precision);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : 3.14

 

float (precison) -> QString

// convert float (precison) to QString

QString in_qstr = "3.14";
float out_value = in_qstr.toDouble();
printf("%f\n", out_value);
// result(float) : 3.140000

 

 

QString -> char

// convert QString to char

QString in_qstr = "QString to char";
char out_str[32] = {NULL, };
sprintf(out_str, "%s", (const char*)(QByteArray)((in_qstr.toLocal8Bit()).data()));
printf("%s\n", out_str);
// result(char) : QString to char

 

 

char -> QString

// convert char to QString

char in_str[32] = "char to QString";
QString out_qstr = QString(in_str);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : char to QString

 

 

QString -> TCHAR

// convert QString to TCHAR

QString in_qstr = "QString to TCHAR";
TCHAR out_tchar[32] = {NULL, };
in_qstr.toWCharArray(out_tchar);
_tprintf(_T("%s\n"), out_tchar);
// result(TCHAR) : QString to TCHAR

 

 

TCHAR -> QString

// convert TCHAR to QString

TCHAR in_tchar[32] = _T("TCHAR to QString");
QString out_qstr = QString::fromWCharArray(in_tchar);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : TCHAR to QString

 

 

QString -> wchar_t

// convert QString to wchar_t

QString in_qstr = "QString to wchar_t";
wchar_t out_wchar[32] = L"";
in_qstr.toWCharArray(out_wchar);
wprintf(L"%s\n", out_wchar);
// result(QString) : QString to wchar_t

 

 

wchar_t -> QString

// convert wchar_t to QString

wchar_t in_wchar[32] = L"wchar_t to QString";
QString out_qstr = QString::fromWCharArray(in_wchar);
printf("%s\n", out_qstr.toLocal8Bit().constData());
// result(QString) : wchar_t to QString

감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 


 

반응형
반응형

 

명령프롬프트 타이머로 프로그램을 실행하는 방법


 

# 결과

  • 5초 후 .txt 파일 오픈하는 명령어

 

# 명령어

  • $ timeout /t 5 && C:\Users\man\Desktop\Done.txt

감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 


 

반응형

'Setting > Windows' 카테고리의 다른 글

Windows Server 설치, 버전 변경  (0) 2024.04.14
반응형

 

C++ Ping 예제소스로 입력한 아이피의 네트워크 연결을 확인할 수 있다.


 

# 개발환경

  • 개발도구 : Visual Studio Community 2017

 

# 결과

  • 입력한 아이피(127.0.0.1)로 ping 명령어 전송함.
  • 정상 ping 송수신 시 OK, 비정상인 경우 Not OK


# 예제소스

  • _popen, _pclose 함수를 사용하여 명령프롬프트(CMD) 실행함.
  • ping -n 1 -w 1 127.0.0.1 | findstr TTL
#include <iostream>

int sendPing(char* ipAddr);

int main()
{
    char ipAddr[128] = "127.0.0.1";
    int flagChk = sendPing(ipAddr);
    if(flagChk==1) printf("OK\n");
    else               printf("Not OK\n");

    return 1;
}

int sendPing(char* ipAddr){
    FILE* cmdWnd;
    char cmdPing[64];
    char buf[128] = {0, };

    bool flagPingOk = 0;
    sprintf(cmdPing, "ping -n 1 -w 1 %s | findstr TTL", ipAddr);
    cmdWnd = _popen(cmdPing, "r");
    if(cmdWnd != NULL){
        int bufLineCnt = 0;
        while(fgets(buf, 128, cmdWnd) != NULL){
            printf("Reply from %s : bytes=32, time<1ms, TTL=128\n", ipAddr);
            bufLineCnt++;
        }

        if(bufLineCnt > 0) flagPingOk = 1; // Connected
        else                   flagPingOk = 0; // Not Connected
    }
    _pclose(cmdWnd);

    return flagPingOk;
}

감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형
반응형

 

문자열 중 "왼쪽에서" 또는 "오른쪽에서" 부터 "특정 문자" 또는 "문자열" 매칭 비교하여

맞는 경우 삭제. 아닌 경우 문자열 그대로 출력.

기존 CString에서 제공하는 함수 중 TrimRight, TrimLeft를 QString에서도 사용할 수 있도록 함수 구현함.


 

# 개발환경

  • 개발도구 : Visual Studio Community 2017
  • QT 버전 : 5.12.5

 

# 결과

  • 테스트 문자열 : Jeff's DevSpace, C++, C, Qt(99)
  • Trim Right 문자열 :  9)
  • Trim Left 문자열 :  Jeff's  


# 예제소스

  • .cpp
    #include <iostream>
    #include <qdebug.h>
    #include "vs2017_qt_example.h"
    
    using namespace std;
    
    vs2017_qt_example::vs2017_qt_example(QWidget *parent) : QMainWindow(parent), ui(new Ui::vs2017_qt_exampleClass)
    {
        ui->setupUi(this);
    
        QString qsTest;
        QString result;
    
        qsTest = "Jeff's DevSpace, C++, C, Qt(99)";
        printQstr(qsTest);
    
        result = trimRight(qsTest, "9)");
        printQstr("QString Trim Right ( 9) ) : " + result);
    
        result = trimLeft(qsTest, "Jeff's");
        printQstr("QString Trim Left ( Jeff's ) : " + result);
    
    }
    
    vs2017_qt_example::~vs2017_qt_example() { }
    
    QString vs2017_qt_example::trimRight(QString qsFullStr, QString target)
    {
        // startIdx
        int len = qsFullStr.length();
        int len2 = target.length();
        int startIdx = len-len2;
        if(startIdx < 0) return qsFullStr;
    
        // parse
        QString qsParse = "";
        for(int n=startIdx; n<len; n++){
            qsParse.append(qsFullStr.at(n));
        }
    
        // cmp, split
        QString qstr = "";
        if(qsParse==target) qstr = qsFullStr.chopped(len2);
        else                    qstr = qsFullStr;
    
        return qstr;
    }
    
    
    QString vs2017_qt_example::trimLeft(QString qsFullStr, QString target)
    {
        // len
        int len = target.length();
        if(qsFullStr.length() < len) return qsFullStr;
    
        // parse
        QString qsParse = "";
        for(int n=0; n<len; n++){
            qsParse.append(qsFullStr.at(n));
        }
    
        // cmp, split
        QString qstr = "";
        if(qsParse==target) qstr = qsFullStr.remove(0, len);
        else                qstr = qsFullStr;
    
        return qstr;
    }
    
    
    void vs2017_qt_example::printQstr(QString qstr)
    {
        qDebug() << qstr << endl;
    }​​
  • .h
    #pragma once
    
    #include <QtWidgets/QMainWindow>
    #include "ui_vs2017_qt_example.h"
    
    class vs2017_qt_example : public QMainWindow
    {
        Q_OBJECT
    
    public:
        vs2017_qt_example(QWidget *parent = nullptr);
        ~vs2017_qt_example();
    
        void printQstr(QString qstr);
        QString trimRight(QString qsFullStr, QString target);
        QString trimLeft(QString qsFullStr, QString target);
    
    private:
        Ui::vs2017_qt_exampleClass* ui;
    
    private Q_SLOTS:
    
    };​

감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 

 


 

반응형
반응형

 

D8040 자식 프로세스를 만들거나 통신하는 동안 오류가 발생했습니다.

 


 

# 문제

  • 아래 사진과 같이 오류 출력

 

# 원인 및 해결

  • 원인 : 프로젝트 경로가 한글 이름으로 된 폴더 내 위치하고 있음
  • 해결 : 한글을 영어로 변경


감사합니다.

 

잘못된 정보나 오타 및 수정사항이 있을 경우 댓글로 달아주시면 감사하겠습니다. 


 

반응형

+ Recent posts