跨平台这里就定义了一个宏,如果该宏在windows上则定义,如果在Linux上则不定义。
跨平台开发只需要改一个地方即可:将#define __Win32__ 1注释掉即表示在linux上开发,如果将其保留,则表示在windows上开发 。
同时linux上需要多些一个makefile文件。
- #pragma once
- #define __Win32__ 1
- #ifdef __Win32__
- #include "targetver.h"
- #include <stdio.h>
- #include <tchar.h>
- #include <iostream>
- using namespace std;
- #include <process.h>
- #include <Windows.h>
- #else
- #include <unistd.h>
- #include<pthread.h>
- #include <iostream>
- using namespace std;
- #endif
- #include "common.h"
- #include "OSThread.h"
- int main(int argc, char* argv[])
- {
- COSThread osThread;
- osThread.Start();
- cout << "press any key to exit\n" << endl;
- int n;
- cin >> n;
- return 0;
- }
- #pragma once
- #include "common.h"
- class COSThread
- {
- public:
- COSThread(void);
- ~COSThread(void);
- bool Start();
- protected:
- #ifdef __Win32__
- static unsigned int __stdcall _Entry(void* inThread);
- #elif __linux__
- static void* _Entry(void* inThread);
- #endif
- private:
- #ifdef __Win32__
- unsigned int fThreadID;
- #elif __linux__
- pthread_t fThreadID;
- #endif
- };
- #include "OSThread.h"
- COSThread::COSThread(void)
- {
- }
- COSThread::~COSThread(void)
- {
- }
- bool COSThread::Start()
- {
- #ifdef __Win32__
- unsigned int theId = 0; // We don't care about the identifier
- fThreadID = _beginthreadex( NULL, // Inherit security
- 0, // Inherit stack size
- _Entry, // Entry function
- (void*)this, // Entry arg
- 0, // Begin executing immediately
- &theId );
- #elif __linux__
- pthread_attr_t* theAttrP = NULL;
- int err = pthread_create((pthread_t*)&fThreadID, theAttrP, _Entry, (void*)this);
- #endif
- return true;
- }
- #ifdef __Win32__
- unsigned int __stdcall COSThread::_Entry( void* inThread )
- {
- int nCOunt = 0;
- while(true)
- {
- cout << "value:" << nCOunt++ << endl;
- Sleep(1000);
- }
- }
- #endif
- #ifdef __linux__
- void* COSThread::_Entry( void* inThread )
- {
- int nCOunt = 0;
- while(true)
- {
- cout << "value:" << nCOunt++ << endl;
- ::usleep(1000 * 1000);
- }
- }
- #endif
- main.out:
- g++ test123.cpp OSThread.cpp common.h -lpthread -o a.out