改编自fltk,添加了linux平台下的Sleep实现,只支持Windows和Linux,分别用vc和gcc编译,代码如下:
1 |
//threads.h, LGPL |
2 |
3 |
#ifndef Threads_H |
4 |
#define Threads_H |
5 |
6 |
#ifdef WIN32 |
7 |
8 |
#include < windows.h > |
9 |
#include < process.h > |
10 |
11 |
typedef unsigned long Fl_Thread; |
12 |
13 |
static int fl_create_thread(Fl_Thread& t, void *(*f) (void *), void* p) |
14 |
{ |
15 |
return t = (Fl_Thread)_beginthread((void( __cdecl * )( void * ))f, 0, p); |
16 |
} |
17 |
18 |
#else |
19 |
20 |
// Use POSIX threading... |
21 |
#include < pthread.h > |
22 |
#include < unistd.h > |
23 |
24 |
typedef pthread_t Fl_Thread; |
25 |
26 |
static int fl_create_thread(Fl_Thread& t, void *(*f) (void *), void* p) |
27 |
{ |
28 |
return pthread_create((pthread_t*)&t, 0, f, p); |
29 |
} |
30 |
31 |
static void Sleep(unsigned long dwMilliseconds) |
32 |
{ |
33 |
usleep(dwMilliseconds * 1000); |
34 |
} |
35 |
36 |
#endif |
37 |
38 |
#endif // !Threads_h |
使用示例:
1 |
#include "thread.h" |
2 |
... |
3 |
4 |
static Fl_Thread m_thread; // define |
5 |
... |
6 |
7 |
// thread create |
8 |
fl_create_thread(m_thread, thread_fun, 0); |
9 |
... |
10 |
11 |
static void* thread_fun(void *p) |
12 |
{ |
13 |
while (1) { |
14 |
... |
15 |
} |
16 |
17 |
return 0; |
18 |
} |