使用並行線程我有在VS .NET 2003在VS .NET 2003
一些問題,我的節目,我最初寫了使用並行線程庫創建多個線程來處理事情的一個模塊。這在VS .NET 2003中正確運行。然後這個模塊被其他人使用並且被集成到另一個更大的程序中。我不確定細節,但程序創建了一個GUI,允許用戶選擇一個選項來運行我的模塊。
當創建線程,一個值被傳遞作爲線程ID。我的模塊在GUI中的問題在於,線程ID的值對於所有線程都是0,而線程ID在沒有GUI的模塊中是正確的。
這裏的線程是如何在模塊中創建:
int64_t *tid[1000];
int64_t i = 0, rc;
for (i = 0 ; i < NUM_THREADS ; i++)
{
tid[i] = (int64_t *) malloc(sizeof(int64_t));
*tid[i] = i;
rc = pthread_create(&pthread, &attr, function, (void *)tid[i]);
Sleep(1);
if(rc)
{
free(tid[i]);
exit(1);
}
free(tid[i]);
}
我查了一下兩者的項目屬性,以及2個項目之間的唯一不同之處列舉如下:
GUI - use managed extensions | my module (w/o GUI) - does not use managed extensions
In C/C++ preprocessor:
GUI - WIN32;_DEBUG;_CONSOLE;WINDOWS | my module (w/o GUI) - none
In C/C++ Additional Options:
GUI - /CLR | my module (w/o GUI) - no /CLR (error with /CLR: fatal error LNK1000: Internal error during BuildImage)
代碼是一樣的,所以我不明白爲什麼GUI的輸出是錯誤的,除非使用託管擴展/ clr以某種方式改變了它? (我真的不知道這些是什麼的要麼。)
編輯補充輸出線程ID代碼的一部分:
void *function(void *input)
{
int64_t threadid = *(int64_t *)input;
printf("threadid = %ld\n", threadid);
...
}
請指教。
謝謝。
問候, 雷恩
是並行線程庫從Unix到Win32的端口? – Achilles 2010-03-03 03:23:08
是的,但是如果模塊在沒有GUI的情況下工作,那麼問題又是如何呢? – Rayne 2010-03-03 03:31:01
您可以顯示讀取tid參數的線程函數的一部分嗎? – 2010-03-03 04:09:40