所以我最近一直在使用线程,并且错误(C#:“ Generic_Function”没有重载匹配委托System.Threading.WaitCallBack)使我有些困惑。
起初我以为必须传递一个参数,然后我才知道它很容易为空。
ThreadPool.QueueUserWorkItem(new WaitCallback(Generic_Function), null);
该函数不应再定义为:
void Generic_Function(){
//Code here
}
但是,我遇到一个错误。我在这里丢失了一些东西,我感到困惑。我尝试阅读文档,但我想我还没有完全掌握这一点。如果有人可以解释,我将不胜感激。非常感谢!
答案 0 :(得分:1)
根据documentation,如下定义了一个WaitCallback:
$ nvprof ./t304
==28135== NVPROF is profiling process 28135, command: ./t304
16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
==28135== Profiling application: ./t304
==28135== Profiling result:
Type Time(%) Time Calls Avg Min Max Name
GPU activities: 42.97% 3.2320us 2 1.6160us 1.4080us 1.8240us [CUDA memcpy HtoD]
28.52% 2.1450us 1 2.1450us 2.1450us 2.1450us [CUDA memcpy DtoH]
28.51% 2.1440us 1 2.1440us 2.1440us 2.1440us wmma_ker(__half*, __half*, float*)
API calls: 98.42% 498.63ms 3 166.21ms 5.2170us 498.61ms cudaMalloc
1.06% 5.3834ms 384 14.019us 347ns 568.79us cuDeviceGetAttribute
0.38% 1.9473ms 4 486.83us 250.95us 1.1810ms cuDeviceTotalMem
0.10% 493.31us 4 123.33us 109.62us 140.63us cuDeviceGetName
0.01% 68.566us 1 68.566us 68.566us 68.566us cudaLaunchKernel
0.01% 67.104us 3 22.368us 9.6850us 30.563us cudaMemcpy
0.00% 22.628us 4 5.6570us 3.1910us 9.2200us cuDeviceGetPCIBusId
0.00% 8.6020us 8 1.0750us 540ns 1.6570us cuDeviceGet
0.00% 5.8370us 3 1.9450us 443ns 3.7760us cuDeviceGetCount
0.00% 2.7590us 4 689ns 600ns 843ns cuDeviceGetUuid
因此,如果您希望代码可以工作,可以进行以下修改:
public delegate void WaitCallback(object state);
答案 1 :(得分:0)
如果由于某些原因您无法更改Generic_Function
签名,则可以使用lambda包装呼叫:
ThreadPool.QueueUserWorkItem(_ => Generic_Function());