2011-07-29 26 views
6

Tôi đang cố gắng tạo một phiên bản cửa sổ của một chương trình được viết cho Linux, bằng C++. Để chương trình an toàn với chuỗi, tôi sử dụng pthread_cond_tpthread_cond_wait trong phiên bản Linux. Các chức năng này sử dụng một mutex để giúp đảm bảo rằng các thread chờ đợi thực sự chờ đợi.CONDITION_VARIABLE trong cửa sổ; wont compile

Tôi thấy rằng CONDITION_VARIABLE có thể thực hiện thủ thuật trong Windows, tuy nhiên tôi không thể hiểu tại sao nó không biên dịch. Tôi nhận được lỗi "lỗi: 'CONDITION_VARIABLE' không đặt tên cho một loại" mặc dù tất cả các tiêu đề có liên quan được bao gồm, theo như tôi có thể nói. Tôi đã thử sao chép-dán mã trên http://msdn.microsoft.com/en-us/library/ms686903%28v=VS.85%29.aspx, mà sẽ không biên dịch hoặc. Tôi đang sử dụng GCC.

Bất kỳ ý tưởng nào về cách biên dịch điều này? hoặc bất kỳ phương pháp thay thế nào khác, không liên quan đến điều kiện biến thể?

+0

Bạn đang sử dụng trình biên dịch nào và SDK Windows của bạn cũ bao nhiêu tuổi? [Chú ý] (http://msdn.microsoft.com/en-us/library/ms683469 (v = VS.85) .aspx) mà bạn cần ít nhất là Vista SDK. – wilx

+0

có thể windows.h được sử dụng bởi gcc/cygwin (?) Quá cũ? Tôi cho rằng nó sẽ là tốt hơn để sử dụng Visual Studio Express cho Windows, hoặc để ăn cắp windows.h và tiêu đề hệ thống khác từ nó cài đặt hoặc nâng cấp các tiêu đề cửa sổ và thư viện theo một cách khác. – user396672

Trả lời

4

Bạn đã xác định _WIN32_WINNTWINVER trước #include <windows.h>?

Điều này là cần thiết để bao gồm định nghĩa cho những thứ chỉ được thêm vào trong các phiên bản sau của Windows. Đối với các biến điều kiện, bạn cần đặt các biến này thành ít nhất 0x0600 vì các biến điều kiện là mới trong V6 (ví dụ: Vista/2008).

Xem http://msdn.microsoft.com/en-us/library/aa383745%28VS.85%29.aspx

+0

Yea .. nghe có vẻ giống như một cái gì đó anh ta có thể bị mất tích. –

+0

Ý tưởng hay, nhưng nó vẫn không biên dịch. chương trình của tôi trông giống như #define _WIN32_WINNT 0x0600 #define winver 0x0600 #include #include #include #include int main (void) { CONDITION_VARIABLE đi; trả lại 0; } – pjaall

+0

@pjaall Phiên bản Windows SDK/Visual Studio/C++ nào bạn đang sử dụng? – Richard

0

Bạn nói rằng bạn đang sử dụng thư viện pthread cho luồng. Bạn đã xem xét this article về cách sử dụng mutex cho cửa sổ, khi sử dụng pthread.

2

Kiểm tra xem bạn có tiêu đề mới nhất của Windows, và WinBase.h có dòng sau:

typedef RTL_CONDITION_VARIABLE CONDITION_VARIABLE, *PCONDITION_VARIABLE; 

Và dĩ nhiên, bạn có _WIN32_WINNT #defined ít nhất 0x600.

-1

Cân nhắc sử dụng pthreads-win32, thực hiện API chủ đề POSIX trên Windows, bao gồm các biến điều kiện.

Các vấn đề liên quan