スレッドを実装し始めました。私は、1つのメインスレッドと2つのスレッドを並列に作成したい。 これは私のコードです:2スレッドはLinuxで並列
#include <stdio.h>
#include <pthread.h>
#include <glib.h>
#include <time.h>
#define THREAD1 1
#define THREAD2 2
GMainLoop *loop1;
GMainLoop *loop2;
pthread_t pth1; // this is our thread identifier
pthread_t pth2; // this is our thread identifier
gboolean timeout_callback1(gpointer data){
clock_t start = clock();
int msec = start * 1000/CLOCKS_PER_SEC;
printf("timeout_callback ==== 1 at %d seconds %d milliseconds\n", msec/1000, msec%1000);
}
gboolean timeout_callback2(gpointer data){
sleep(2);
clock_t start = clock();
int msec = start * 1000/CLOCKS_PER_SEC;
printf("timeout_callback ==== 2 at %d seconds %d milliseconds\n", msec/1000, msec%1000);
}
/* This is our thread function. It is like main(), but for a thread */
void *threadFunc(void *arg)
{
int *index;
int i = 0;
index=(int*)arg;
if (index == THREAD1){
printf("threadFunc: %d\n", index);
loop1 = g_main_loop_new (NULL , FALSE);
//add source to default context
g_timeout_add (100 , timeout_callback1 , loop1);
g_main_loop_run (loop1);
g_main_loop_unref(loop1);
} else {
if (index == THREAD2){
printf("threadFunc: %d\n", index);
loop2 = g_main_loop_new (NULL , FALSE);
//add source to default context
g_timeout_add (100 , timeout_callback2 , loop2);
g_main_loop_run (loop2);
g_main_loop_unref(loop2);
}else
printf("index not support\n");
}
return NULL;
}
int main(void)
{
int i = 0;
/* Create worker thread */
pthread_create(&pth1,NULL,threadFunc,THREAD1);
pthread_create(&pth2,NULL,threadFunc,THREAD2);
/* wait for our thread to finish before continuing */
while(1)
{
usleep(1);
//printf("main() is running...\n");
//++i;
}
return 0;
}
コマンドのビルド:
gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include thread.c -o thread -lglib-2.0 -lpthread
結果:私の期待通りのような
threadFunc: 2
threadFunc: 1
timeout_callback ==== 1 at 0 seconds 2 milliseconds
timeout_callback ==== 2 at 0 seconds 72 milliseconds
timeout_callback ==== 1 at 0 seconds 72 milliseconds
timeout_callback ==== 2 at 0 seconds 142 milliseconds
timeout_callback ==== 1 at 0 seconds 142 milliseconds
timeout_callback ==== 2 at 0 seconds 218 milliseconds
timeout_callback ==== 1 at 0 seconds 218 milliseconds
timeout_callback ==== 2 at 0 seconds 283 milliseconds
timeout_callback ==== 1 at 0 seconds 283 milliseconds
timeout_callback ==== 2 at 0 seconds 348 milliseconds
timeout_callback ==== 1 at 0 seconds 348 milliseconds
timeout_callback ==== 2 at 0 seconds 421 milliseconds
この結果is'n。私は考えているtimeout_callback1 timeout_callback2のため、timeout_callback2にはsleep(2)があるため、timeout_callback1はと呼ばれています。
結果について私に説明してもらえますか? そして、私はtimeout_callback1を独立性のあるtimeout_callback2で実行する方法をアドバイスしていますか?
はありがとうございました。
'clock()'プロセス全体のCPU時間のみを測定します。 'sleep()'はCPUを消費しません。何を正確に測定したいですか? –