2011-12-09 10 views
5

Tôi không biết làm thế nào tôi có thể tạo chủ đề trong C, tôi đã thấy một bài đánh giá về thư viện pthread.h nhưng sau đó tôi nghe nói rằng nó chỉ dành cho hệ điều hành Linux, tôi có chức năng hẹn giờ, tôi muốn tạo một chuỗi nhưng tôi không biết thư viện nào tôi cần sử dụng và cú pháp để viết mã, nếu ai đó có thể cung cấp cho tôi một mã đơn giản với chủ đề hoặc cho tôi biết những thứ tôi cần đặt và tham số của hàm.Làm cách nào để tạo đa luồng trong C cho windows?

Ở đây chức năng tôi tạo ra đếm ngược thời gian cụ thể mà người dùng áp dụng: tôi cần tạo một chuỗi có chức năng đó.

Function (Đếm ngược):

#include <stdio.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <time.h> 

void countdown(int second) 
{ 
    int secs = 1; 
    time_t unix; 
    struct tm * timeinfo; 
    time(&unix); 
    timeinfo = localtime(&unix); 
    int t1 = timeinfo->tm_sec; 
    int t2 = timeinfo->tm_sec; 
    int i = 0; 

    while(1 == 1) 
    { 
     time(&unix); 
     timeinfo = localtime(&unix); 
     if((t1 + i) == timeinfo->tm_sec) 
     { 
       system("cls"); 
       printf("Time left %d\n", timeinfo->tm_sec - t2 - second); 
       i++; 
     } 
     if(timeinfo->tm_sec >= (t1 + second)) 
     { 
      system("cls"); 
      puts("Your time its done"); 
      break; 
     } 

    } 
} 

int main() 
{ 
    int limit; 
    printf("How much time would you like (In secs): "); 
    scanf("%d", &limit); 
    countdown(limit); 

    system("PAUSE"); 
    return 0; 
} 
+0

Hi. Bạn có thể sử dụng CreateThread từ win32 api – danca

Trả lời

3

Dưới đây là một hướng dẫn đơn giản để WINAPI đề
http://www.cs.rpi.edu/academics/courses/netprog/WindowsThreads.html

đó đang được nói, C là một ngôn ngữ tối giản, không có built-in luồng như java (cũng không phải các thư viện phụ lớn). Nó có nghĩa là một ngôn ngữ chung để xây dựng trên nó. Trên các hệ thống giống Unix có hệ thống thư viện chuẩn c rộng vượt tiêu chuẩn ANSI/ISO, là một phần của tiêu chuẩn posix, các pthread là các chuỗi posix. Windows C thư viện là MS làm cho mọi thứ theo cách riêng của họ. Bạn có thể sử dụng các khung công tác cung cấp hỗ trợ đa hệ điều hành như glib hoặc qt (Windows, Linux, khác * nix). Ngoài ra còn có các cổng và các lớp tương thích để sử dụng các cơ sở posix bên trong các cửa sổ. Cigwin cung cấp cho bạn một môi trường posix đầy đủ bên cạnh các thư viện, trình biên dịch MinGW cho phép bạn sử dụng các cổng của các hàm posix trên các lớp win32.

Các khung như glib và qt là tốt nhất để giữ mã đa nền tảng của bạn, chúng ẩn chi tiết hệ điều hành, cho phép tiếp cận chung hơn.

glib là một phần của thư viện GTK để phát triển GUI và QT cũng là một khung phát triển GUI nhưng trong C++.

3

Thẻ đề xuất bạn đang sử dụng Windows. Win32 api có chức năng CreateThread có thể được sử dụng để khởi chạy một chuỗi mới. Tuy nhiên, nếu bạn đang sử dụng thời gian chạy C (bạn đang sử dụng) thì bạn nên sử dụng chức năng _beginthread bằng cách bao gồm process.h.

Lý do sử dụng _beginthread là nó khởi tạo thông tin trạng thái cụ thể của luồng mà thời gian chạy C yêu cầu thực thi đúng trong chuỗi.

+0

cảm ơn bạn rất nhiều: D –

3

Nếu bạn quen thuộc với pthreads và/hoặc muốn có một nền tảng mã đa nền tảng, bạn có thể sử dụng MinGWpthreads-win32. Gần đây tôi đã sử dụng nó trong một ứng dụng của tôi và nó có vẻ làm việc tuyệt vời. Nếu bạn đang phát triển dành riêng cho Windows, có lẽ nó đáng để bạn tìm hiểu về công cụ phân luồng WinAPI như được đề xuất.

2

Thư viện chuẩn C không có khái niệm chuỗi. Một luồng thường là một khái niệm trong hệ điều hành. Bạn có thể sử dụng win32api để xử lý các chủ đề giống như bạn sử dụng pthread trong linux (không quá bình đẳng thực sự ..)

Để biết thêm về win32api, vui lòng truy cập MSDN.

Làm thế nào để tạo ra sợi với win32api:

http://msdn.microsoft.com/en-us/library/windows/desktop/ms682516(v=vs.85).aspx